簡體   English   中英

如何使用Python將CSV數據復制到現有的xlsx文件

[英]How to copy CSV data to an existing xlsx file using Python

我正在使用Python 3.4,並且正在編寫一個簡短的腳本。 我有一個可執行文件,該可執行文件接受軟件的輸出,並輸出一堆帶有所需數據的csv文件。 我已經創建了一個Excel(xlsx)文件作為模板。 它具有適合特定要求的圖表。

我想在每個csv文件中獲取一定范圍的數據,然后將它們輸入到我已經創建的現有excel模板中,並使用唯一的文件名進行保存。 本質上是重復此過程。

每個csv文件將具有唯一的名稱。 我的目標是幫助自動創建圖形。 有時,這最終可能是100個圖形。 我已經在很少的幫助下搜索了很多方法。

再次,我將啟動腳本,它將遍歷每個csv文件(無論是5還是500),然后復制數據(一定范圍,始終在同一單元格中),然后將其粘貼到我創建的模板xlsx文件中並以與csv相似的名稱保存它,但擴展名為.xlsx。

我不知道這是最好的方法,還是應該創建一個將復制到的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文件,並使用數據創建一個數組數組(矩陣)。 通常使用csv模塊(在Python 3中不需要unicodecsv'add-on')。

如果數據只是數字,而您不必擔心帶引號的字段,那么讀取行會更快。 因此,您的read_csv()函數將如下所示:

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

然后,您的write_to_excel()函數將接受“數據”並寫入模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM