该程序需要结合文件名获取脚本及数据数据提取脚本。
该脚本自动化将目录下所有的csv文件中的数据转换为曲线图显示,且循环显示每一csv数据的曲线图。自动化执行,直到将目录下所有的csv数据全部显示完。并且在每绘制一次csv数据图时,自动将数据图以png类型保存在桌面下.../CSV/NewData/DataValue/Figure目录下。
#!usr\bin\python # -*-coding:utf-8 -*- import csv import pandas as pd import numpy as np import winreg import os import matplotlib.pyplot as plt import shutil '''******************链表文件数据和个数提取******************''' def get_desktop(): key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')#利用系统的链表 return winreg.QueryValueEx(key, "Desktop")[0] #返回的是Unicode类型数据 def mkdir(root):#创建CSV文件夹 Desktop_path = str(root) mkpath = Desktop_path + '\CSV\NewData\DataValue\Figure' if os.path.exists(mkpath) is False: # 判断一个目录是否存在 os.mkdir(mkpath + '\\') # 创建目录,用于存放处理后的数据 else: shutil.rmtree(mkpath) # 可以直接删除非空文件夹 os.mkdir(mkpath + '\\') # 创建目录,用于存放处理后的数据 return mkpath def listfilehandle(listfile): Rowdata = [] rfile = open(listfile, 'r') rfilelist = rfile.readlines()#直接读取文件中每一行数据转换成List类型 #ListFileLen = len(rfilelist) # 链表文件中文件名的个数 #print ListFileLen for filename in rfilelist: Rowdata.append(filename.strip('\n')) return Rowdata '''******************CSV文件名打开路径列表*****************''' def fnlistpath(filename): root = 'C:\Desktop\CSV\NewData\DataValue'#转换后的csv数据所在的目录 fileopenpath = root + '\\' + filename return fileopenpath '''***********************特定数据提取********************************''' def get_desktop(): key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')#利用系统的链表 return winreg.QueryValueEx(key, "Desktop")[0] #返回的是Unicode类型数据 def GetCsvAllData(filepath):#读取CSV所有数据 data = pd.read_csv(filepath, header=None, index_col=None) return data def GetCsvColData(data,Col):#读取Col=1列数据 getcoldata = data.ix[:,Col] # 读取所有行,Col列数据,此处固定第一列(表示扫描电压值)Col=1 return getcoldata def DataToList(data):#只转换一列数据为List类型 arrsdata = data.values # Col列数据的值存放在数组中 listdata = arrsdata.tolist() # array类型转换为list类型 return listdata def GetSatisfyDataRowList(listdata, satisfyvalue):#得到满足数据的所有行,转换为List类型 getdatalist = [] # 参考列下所有数据列表 getrowlist = [] # 满足条件的行号列表 for idata_list in listdata:#主要对参考列的数据进行曲有效数据位,方便数据检索(可去除,视情况而定) fidata_list = float("%.4f" % idata_list) # 仅显示4位有效数据,且转换为浮点型 getdatalist.append(fidata_list) for ilb in range(len(listdata)): if getdatalist[ilb] == satisfyvalue: getrowlist.append(ilb) #print ilb return getrowlist def dataclassify(datalist): Singdata = [] Doubdata = [] datalen = len(datalist) for item in range(datalen): if item % 2 == 0: Singdata.append(datalist[item]) else: Doubdata.append(datalist[item]) return Singdata,Doubdata if __name__=='__main__': alllistdata = [] Desktop_path = str(get_desktop()) newdir = mkdir(get_desktop()) print newdir listfilesroot = Desktop_path +'\CSV\NewData\listfile.txt'#CSV文件名所在的TXT文件 Rowdata = listfilehandle(listfilesroot) i=0 plt.figure(1) plt.ion()#动画显示 for index in Rowdata: i += 1 filepath = fnlistpath(index) getdata1 = GetCsvAllData(fnlistpath(Rowdata[0])) listVoldata = np.array(DataToList(GetCsvColData(getdata1, 1))) getdata = GetCsvAllData(filepath) listdata = np.array(DataToList(GetCsvColData(getdata,2))) #plt.figure(num=i) plt.title("I-V Curve["+str(i)+']') #plt.scatter(X_parameter, Y_parameter, color='black') plt.plot(listVoldata, abs(listdata), 'b*-', linewidth=3) plt.yscale('log')#Y轴采用对数显示 plt.xlabel('Voltage(V)') plt.ylabel('Current(A)') #plt.xlim(-0.5,5.0)#X轴起始点 plt.ylim(0.0000000000001,0.001) #plt.axvline(0.1,color='red', linewidth=3) plt.axhline(0.0001,color ='red', linewidth=3) plt.grid(True)#显示格线 plt.pause(0.002)#图像延时 plt.savefig(newdir+'\\'+str(index)+'.png')#,dpi=72) plt.cla()#擦除图像 plt.show() print("END")