如何使用Python将CSV数据复制到现有的xlsx文件

我正在使用Python 3.4,我正在写一个简短的脚本。 我有一个可执行文件,获取一个软件的输出,并输出一串csv文件与请求的数据。 我创build了一个Excel(xlsx)文件作为模板。 它有适合具体要求的图表。

我想在这些csv文件的每个文件中获取一定范围的数据,然后将其input到已创build的现有excel模板中,并使用唯一的文件名保存它。 基本上重复这个过程。

每个csv文件将有一个唯一的名称。 我的目标是帮助自动创build图表。 有时候最终可能是100个图。 我已经search了很多如何做到这一点,没有什么帮助。

再一次,我会启动脚本,它会运行通过每个CSV文件(无论是5或500),然后复制数据(一定的范围,总是在同一个单元格),然后将其粘贴到我已经创build的模板xlsx文件并使用与csv相似的名称进行保存,除非它将具有.xlsx作为扩展名。

我不知道这是最好的办法,或者如果我应该创build一个csv模板,而不是它将复制到。

任何帮助非常感谢,谢谢。

第一种方法

如果您的最终目标是从csv中可用的数据生成图表,那么您可以使用csvReader读取数据并使用matplotlib绘制图表。

简单的例子:

Sample csv file: 1,10,45 2,20,30 3,30,90 4,40,80 import csv import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages keys = ['Col1','Col2','Col3'] col1 = [] col2 = [] col3 = [] fd = open('sample.csv','r') reader = csv.DictReader(fd,fieldnames=keys) for row in reader: col1.append(int(row['Col1'])) col2.append(int(row['Col2'])) col3.append(int(row['Col3'])) pp = PdfPages("Sample.pdf") plt.title("Col1 Vs Col2") plt.xlabel("X-Values") plt.ylabel("Y-Values") plt.plot(col1,col2,label="Label 1",marker = "*") legend = plt.legend(loc='best', shadow=True, fontsize=6) legend.get_frame().set_facecolor('#00FFCC') plt.grid(True) plt.savefig(pp,format='pdf') plt.clf() plt.title("Col1 Vs Col3") plt.xlabel("X-Values") plt.ylabel("Y-Values") plt.plot(col1,col3,label="Lable 2",marker = "*") legend = plt.legend(loc='best', shadow=True, fontsize=6) legend.get_frame().set_facecolor('#00FFCC') plt.grid(True) plt.savefig(pp,format='pdf') plt.clf() pp.close() 

参考文献:

第二种方法

您可以使用xlrd,xlwt和xlutils对excel文件执行操作

使用csvReader读取数据,使用xlutils复制现有模板,编辑并再次保存

参考:

您可以使用glob模块获取所有文件:

  import glob csv_file_list = glob.glob('*.csv') for fyle in csv_file_list: data = read_csv(fyle) write_to_excel(data) 

你的read_csv()函数应该接受一个CSV文件,并用数据创build一个数组(matrix)的数组。 通常使用csv模块(在Python 3中不需要unicodecsv'add-on')。

如果数据只是数字,而且不必担心带引号的字段,那么读取这些行要快得多。 所以你的read_csv()函数看起来像这样:

 with open(fyle,'rb') as input: data = input.readlines().split(delim) return data 

然后你的write_to_excel()函数会接受'data'并写入你的模板。