Python实现TXT、CSV、XLS等格式转换 and 图像显示(超详细教程)

数据处理整理

处理点云数据的心得
使用xlwt对xls进行写操作
使用xlrd对xls进行读操作,可以直接读出文件的行数和列数
使用pandas也可以对csv、xls文件进行读写、两种格式转换,将两个文件进行合并在一起,将多个sheet列表整合在一个文件中
NOTE: csv类似于txt格式,针对csv格式,有专门的csv模块处理

  • 1 rename
  • 2 open(data.txt)
  • 3 .xls(写入)
  • 4 shutil() 复制和剪切
  • 5 pd阅读 .xls特定单元格
  • 6 多个sheet保存在同一个.xls中
  • 7 pd阅读.xls特定文本框、xlwt写入
  • 8 pd将.xls转化为.csv格式
  • 9 创建.csv并写入
  • 10 matplotlib 显示图像

程序如下:

from __future__ import division
import shutil
import pandas as pd     #Pandas使用一个二维的数据结构DataFrame来表示表格式的数据,相比较于Numpy,Pandas可以存储混合的数据结构,同时使用NaN来表示缺失的数据
import matplotlib     #绘制曲线图
import matplotlib.pyplot as plt
import xlrd        #用于处理excel文件
import xlwt
from xlrd import open_workbook
import matplotlib as mpl
import os    #用于处理文件
import sys      #系统操作,带上就行了
import csv
##脚本81,84,89可用于修改txt文档的隔开形式(' ' , ',' , '\t')

filedir = os.path.dirname(sys.argv[0])      #获取脚本所在目录
os.chdir(filedir)       #将脚本所在的目录设置为工作目录
wdir = os.getcwd()        #返回当前目录
print('当前工作目录:{}\n'.format(wdir))      #打印当前工作目录

1 rename

for parent, dirs, files in os.walk(wdir):
    i = 1
    parent_base = os.path.basename(parent)  # 返回path最后的文件名
    if 'data' in parent_base:     #判断data文件夹是否存在
        os.chdir('data')      #将data文件夹设置为当前目录
        for file in files:
            # file_ext = file.split('.')[-1]         #返回文件的路径和文件名
            file_qian = file.split('.')[-2]    #对文件进行rename
            tmp = parent.split('\\')
            # new_name = 'data' + '/' + 'obj' + '/' + str(i).zfill(8) + '.' + file_ext
            new_name = file_qian + '.' + 'txt'

            old_path = os.path.join(parent, file)  # 分离的部分合成一个整体
            new_path = os.path.join(parent, new_name)
            os.rename(old_path, new_path)    
            i += 1    
print('已完成 abc -- > txt 格式转化')    
filedir = os.path.dirname(sys.argv[0])      #获取脚本所在目录
os.chdir(filedir)       #将脚本所在的目录设置为工作目录
wdir = os.getcwd()        #返回当前目录
print('当前工作目录:{}\n'.format(wdir))      #打印当前工作目录 

for parent, dirs, files in os.walk(wdir):    #遍历脚本目录所有文件
    i = 0
    parent_base = os.path.basename(parent)  # 返回path最后的文件名
    if 'data' in parent_base:
        print(parent)
        os.chdir(parent)
        #os.chdir('data')
        os.mkdir('results')
        w = 0
        list = []
        writer = pd.ExcelWriter('many_sheets.xls')    #保存结果到已存在的excel文档中

        for file in files:
            old_front = file.split('.')[0]     #对文件进行重命名
            old_ext = file.split('.')[-1]
            old_name = old_front + '.' + old_ext
            hour = old_front.split('-')[-1]
            print('小时', hour)
            new_name = old_front + '.' + 'xls'

2 open(data.txt)

		   #if file.split('.')[-1] == "txt":
           #   new_name = file.split('.')[0] + '.' + 'xls'
           #     df = open(file, 'r')
           #    lines = df.readlines()
           #     for line in lines:
           #         if line.strip() == '':
           #             continue
           #          if line.strip() == '"':
           #             continue
		                 
            open_txt  = open(file,'r',encoding='utf-8')   #打开txt文档
            next(open_txt)   

3 xls(写入)

            workbook = xlwt.Workbook()   #初始化xlwt
            sheet_1 = workbook.add_sheet(old_front,cell_overwrite_ok = True)    #对打开excel文档进行添加sheet_1 

            q =0
            for line in open_txt:   #txt文档的每一行都进行执行
                line = open_txt.readline()   #阅读每一行的内容
                if line.strip() == '':    #line.strip()是移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
                    continue
                if line.strip() == '"':
                    continue    
                for h in range(len(line.split(' '))):     #对特定的某行进行处理
                    if h == 0:
                        first_cell = line.split(' ')[0]
                        minute = first_cell.split(':')[0]
                        second = first_cell.split(':')[-1]
                        item = hour + ':' + minute + ':' +  second
                    else:
                        item = line.split(' ')[h]

                    sheet_1.write(q,h,item)  #定义的excel的shee_1中写入数据
                q = q + 1    
            workbook.save(new_name)   #对写入数据的sheet_1的excel进行保存
            data_collect = pd.read_excel(new_name,index_col = 0,header = None)   #使用pd打开文档
            data_collect.to_excel(writer,sheet_name = hour,header = False)   #一个excel同时保存多个sheet文档
            writer.save()  #对保存有多个sheet的excel进行保存
            
            list.append(q)
            print(list)

4 shutil() 复制和剪切

            shutil.copy(new_name,'results')   #将文件复制到“result”,前面是文件,后面是目录
        shutil.move('many_sheets.xls', 'results')  #move相当于剪切,remove相当于删除
        sum = 0
        for p in range(len(list)):
            sum = sum + list[p]
        print('all_总行数为:',sum)

print('已将将所有的数据转化为xls格式文件!')

print('list0',list[0])
filedir = os.path.dirname(sys.argv[0])      #获取脚本所在目录
os.chdir(filedir)       #将脚本所在的目录设置为工作目录
wdir = os.getcwd()        #返回当前目录
print('当前工作目录:{}\n'.format(wdir))      #打印当前工作目录

for parent, dirs, files in os.walk(wdir):
    i = 0
    parent_base = os.path.basename(parent)  #返回path最后的文件名
    print(parent_base)
    if 'results' in parent_base:
        print(parent)
        os.chdir(parent)
        u = 0
        x = 0
        sum_c = 0
        i = 0
        m = 0

5 pd阅读 .xls特定单元格

        workbook = xlwt.Workbook()     #将xlwt进行初始化
        sheet2 = workbook.add_sheet('all', cell_overwrite_ok=True)   #添加文档sheet2
        # workbook = xlwt.Workbook()
        # sheet3 = workbook.add_sheet('diagram', cell_overwrite_ok=True)
        for file in files :
            df = pd.read_excel(file,header=0,index_col=None)  #使用pd阅读文档
            if i > (len(list) - 1):
                break
            long = list[i]
            print(long)

            for x in range(long-1) :
                for y in range(12) :
                    item = df.ix[x,y]   #阅读excel文件的特定的单元格
                    # print(item)
                    sheet2.write(m,y,str(item))    #将excel文件写入到同一个sheet2,这种写法不实用,可以使用矩阵代替
                m = m + 1
            i = i + 1
            workbook.save('all_data.xls')  #将多个sheet保存在同一个sheet中

6 多个sheet保存在同一个 .xls中

        data_collect = pd.read_excel('all_data.xls', index_col=0, header=None)  #使用pd打开excel文档
        data_collect.to_excel(writer, sheet_name='all_date', header=False)   #将多个sheet保存在同一个excel文档中
        writer.save()   #对文档进行保存
        print('all_data.xls 已经成功!')

        ax = 0
        ay = 0
        d = -1

7 pd阅读xls特定文本框、xlwt写入

        workbook = xlwt.Workbook()   #对xlwt进行初始化
        sheet3 = workbook.add_sheet('diagram', cell_overwrite_ok=True)  #创建sheet3

        nm = pd.read_excel('all_data.xls',header=0,index_col=None)   #使用pd阅读文档
        for ax in range(200):
            if ax % 25 == 0:
                d = d + 1
                for ay in range(11):
                    cell = nm.ix[ax,ay]  #阅读特定单元格的内容
                    sheet3.write(d,ay,str(cell))   #将阅读的内容写入到sheet3中

        workbook.save('diagram.xls')  

        data_collect_2 = pd.read_excel('diagram.xls', index_col=0, header=None)
        data_collect_2.to_excel(writer, sheet_name='diagram', header=False)   #将多个sheet保存在同一个excel中
        writer.save()
        print('diagram.xls 已经成功!')

8 pd将xls转化为csv格式

        data_xls = pd.read_excel('diagram.xls',index_col=0)  #使用pd阅读excel文件
        data_xls.to_csv('diagram1.csv')    #使用pd将excel文件保存成csv

9 创建csv并写入

        with open('diagram.csv', 'w', newline="") as csvfile:  # 打开header-1.csv,没有就创建一个,newline是保证写入之后不自动空格
            writer_2 = csv.writer(csvfile)  # 对文件进行写操作

            # 先写入columns_name
            writer_2.writerow(["time", "V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11", "V12", "V13", "V14"])
        with open('diagram.csv','ab+') as f :
            f.write(open('diagram1.csv','rb').read())  #对csv进行写操作

        df = pd.read_csv('diagram.csv')   #阅读csv文件

10 matplotlib 显示图像

#使用matplotlib进行显示csv文档
        figsize = 12, 12  # 图表的大小
        plt.subplot(331)  # subplot(221)创建2*2的图表1表示在第一个
        plt.plot(df['time'], df['V1'])  # plot(a,b)进行绘制曲线,a表示横坐标,b表示纵坐标,df['time']表示索引第一行为time的那一列
        plt.xticks(rotation=90)  # 创建的matplotlib表格旋转45°
        plt.ylabel(u'电池板电压(V)', fontproperties='SimHei')  # y轴的标签
        plt.xlabel(u'时间', fontproperties='SimHei')  # y轴的标签

        plt.subplot(332)
        plt.plot(df['time'], df['V2'])
        plt.xticks(rotation=90)
        plt.ylabel(u'电池板电流(A)', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')

        plt.subplot(333)
        plt.plot(df['time'], df['V3'])
        plt.xticks(rotation=90)
        plt.ylabel(u'蓄电池电压(V)', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')
		
        plt.subplot(334)
        plt.plot(df['time'], df['V4'])
        plt.xticks(rotation=90)
        plt.ylabel(u'蓄电池电流(A)', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')
		
        plt.subplot(335)
        plt.plot(df['time'], df['V5'])
        plt.xticks(rotation=90)
        plt.ylabel(u'环境温度(℃)', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')

        plt.subplot(336)
        plt.plot(df['time'], df['V7'], 'b', label=u"充电功率(W)")
        plt.plot(df['time'], df['V8'], 'k', label=u"发电功率(W)")
        plt.xticks(rotation=90)
        plt.ylabel(u'充电/发电功率', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')
		
        plt.subplot(337)
        plt.plot(df['time'], df['V10'], 'b', label=u"累计充电(Ah)")
        plt.plot(df['time'], df['V11'], 'k', label=u"累计放电(Ah)")
        plt.xticks(rotation=90)
        plt.ylabel(u'累计充电/放电', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')

        # myfont = matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/msyh.ttf')   #处理matplotlib中中文显示的问题
        # mpl.rcParams['axes.unicode_minus'] = False
        # plt.grid(True)  #显示网格线
        plt.show()

        plt.plot(df['time'], df['V1'])  # plot(a,b)进行绘制曲线,a表示横坐标,b表示纵坐标,df['time']表示索引第一行为time的那一列
        plt.xticks(rotation=90)  # 创建的matplotlib表格旋转45°
        plt.ylabel(u'电池板电压(V)', fontproperties='SimHei')  # y轴的标签
        plt.xlabel(u'时间', fontproperties='SimHei')  # y轴的标签
        plt.show()

        plt.plot(df['time'], df['V2'])
        plt.xticks(rotation=90)
        plt.ylabel(u'电池板电流(A)', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')
        plt.show()

        plt.plot(df['time'], df['V3'])
        plt.xticks(rotation=90)
        plt.ylabel(u'蓄电池电压(V)', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')
        plt.show()

        plt.plot(df['time'], df['V4'])
        plt.xticks(rotation=90)
        plt.ylabel(u'蓄电池电流(A)', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')		

        plt.plot(df['time'], df['V5'])
        plt.xticks(rotation=90)
        plt.xlabel(u'时间', fontproperties='SimHei')
        plt.ylabel(u'温度(℃)', fontproperties='SimHei')
        plt.show()

        plt.plot(df['time'], df['V7'], 'b', label=u"充电功率(W)")
        plt.plot(df['time'], df['V8'], 'k', label=u"发电功率(W)")
        plt.xticks(rotation=90)
        plt.ylabel(u'充电/发电功率', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')
        plt.show()
		
        plt.plot(df['time'], df['V10'], 'b', label=u"累计充电(Ah)")
        plt.plot(df['time'], df['V11'], 'k', label=u"累计放电(Ah)")
        plt.xticks(rotation=90)
        plt.ylabel(u'累计充电/放电', fontproperties='SimHei')
        plt.xlabel(u'时间', fontproperties='SimHei')
       print('over!')

	
       # # show data
# plt.scatter(x, y, c='magenta', s=50, alpha=0.5, label='train')
# plt.scatter(test_x, test_y, c='cyan', s=50, alpha=0.5, label='test')
# plt.legend(loc='upper left')
# plt.ylim((-2.5, 2.5))
# plt.show()

你可能感兴趣的:(python)