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

如何使用Python将CSV数据复制到现有xlsx文件,python,excel,csv,export,Python,Excel,Csv,Export,我正在使用Python3.4,我正在编写一个简短的脚本。我有一个可执行文件,它接收软件的输出,并输出一堆csv文件和请求的数据。我已经创建了一个Excel(xlsx)文件作为模板。它有一个根据特定需求定制的图表 我想在每个csv文件中获取一定范围的数据,然后将它们输入到我已经创建的现有excel模板中,并用唯一的文件名保存。基本上是迭代这个过程 每个csv文件都有一个唯一的名称。我的目标是帮助自动创建图形。有时,这最终可能是100个图形。我已经搜索了很多关于如何在没有什么帮助的情况下做到这一点

我正在使用Python3.4,我正在编写一个简短的脚本。我有一个可执行文件,它接收软件的输出,并输出一堆csv文件和请求的数据。我已经创建了一个Excel(xlsx)文件作为模板。它有一个根据特定需求定制的图表

我想在每个csv文件中获取一定范围的数据,然后将它们输入到我已经创建的现有excel模板中,并用唯一的文件名保存。基本上是迭代这个过程

每个csv文件都有一个唯一的名称。我的目标是帮助自动创建图形。有时,这最终可能是100个图形。我已经搜索了很多关于如何在没有什么帮助的情况下做到这一点

我再次启动脚本,它将运行每个csv文件(无论是5个还是500个),然后复制数据(一定范围,始终在相同的单元格中),然后将其粘贴到我创建的模板xlsx文件中,并将其保存为与csv类似的名称,只是扩展名为.xlsx

我不知道这是否是最好的方法,或者我是否应该创建一个csv模板,而不是将其复制到


非常感谢您的帮助。

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

read_csv()函数应接受一个csv文件,并使用数据创建一个数组(矩阵)。使用该模块是很常见的(在Python3中,该模块不需要Unicodesv“add-on”)

如果数据只是数字,并且您不必担心带引号的字段,那么只读取行会快得多。因此,您的read_csv()函数如下所示:

with open(fyle,'rb') as input:
    data = input.readlines().split(delim)
return data
然后您的
write\u to\u excel()
函数将接受“数据”并写入模板。

第一种方法 如果最终目标是从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复制现有模板,编辑该模板,然后再次保存

参考:


您打算用什么来读/写xlsx?我以前使用过该模块。我尝试过这些,但没有太大帮助。我想我计划使用那些excel模块xlsxwrt。这看起来很棒,但我想将从CSV读取的数据粘贴回现有excel模板中的某个范围。前5行也是带引号的字段,但我不需要它们。前5行是始终创建但不需要传输到我的模板的文本。如何确保从CSV中获取第六行和第六行(都是数字),以便粘贴到现有Excel模板的特定部分?希望这是有道理的。谢谢。philshem write_to_excel()函数是什么样子的?我想确保我知道如何写入我创建的现有excel模板。@duranil有很多选项,但可能类似于或,这很好,但问题是我需要将CSV文件的特定数据范围(仅数字)粘贴到已创建绘图的现有excel文件中。我认为只提取CSV数据的范围并将它们粘贴到我的Excel模板中会更容易。可能吗?谢谢
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()