我正在使用Python 3.4,我正在编写一个简短的脚本。我有一个可执行文件,它接受软件的输出并输出一堆带有请求数据的csv文件。我创建了一个Excel(xlsx)文件作为模板。它有一个专门针对特定要求的图表。
我想在每个csv文件中获取一定范围的数据,然后将它们输入到我已创建的现有excel模板中,并使用唯一的文件名保存。基本上迭代这个过程。
每个csv文件都有一个唯一的名称。我的目标是帮助自动创建图形。有时这最终会成为100多个图形。我已经搜索了很多关于如何在没什么帮助的情况下做到这一点。
我再次启动脚本,它会遍历每个csv文件(无论是5还是500),然后复制数据(某个范围始终位于相同的单元格中),然后将其粘贴到模板xlsx文件中我创建并使用与csv类似的名称保存它,除了它将.xlsx作为扩展名。
我不知道这是否是最好的方法,或者我是否应该创建一个csv模板而不是它将复制到。
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
如果您的最终目标是根据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复制现有模板,编辑并再次保存
参考:
答案 1 :(得分:0)
您可以使用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文件并使用数据创建数组(矩阵)数组。使用csv模块(在Python 3中不需要unicodecsv'附加组件')是很常见的。
如果数据只是数字而您不必担心引用的字段,那么只需读取行就快得多。所以你的read_csv()函数看起来像这样:
with open(fyle,'rb') as input:
data = input.readlines().split(delim)
return data
然后,您的write_to_excel()
函数会接受'数据'并写入您的模板。