2013-08-06 188 views
0

我將一個文件夾中的多個CSV合併爲一個CSV,並且由於某種原因,當我運行代碼時,它會將相同的文件複製到1中並重復其自身。對不起,如果這是模糊的。這是我正在運行的代碼,這可能會比我更好地解釋它。將CSV文件合併爲1 CSV

import csv 
import glob 

fo = open("CombinedLog.csv", "ab") 

list = glob.glob('*.csv') 
print list 

for file in list: 
    ifile = open(file, "rb") 
    reader = csv.reader(ifile) 
    for row in reader: 
    row = ",".join(row) + "\n" 
    fo.write(row) 
ifile.close() 

fo.close() 
+0

唉。爲什麼你會使用CSV閱讀器很好地解析CSV,然後使用'','。join'將其寫回並丟失所有的轉義? – geoffspear

+0

在爲'* .csv'填充之前,您正在執行'open()'。這意味着globbed列表還將包含您的'CombinedLog.csv',因爲那個是在您調用'open()'時創建的。 – confusopoly

回答

0

如果這是你在做什麼,你不想要一個完整的程序它...在Windows命令提示符下從該目錄,你可以運行:

copy *.csv all.csv 

它使用通配符*複製所有的CSV,並創建了一個名爲「all.csv」的新文件,其中包含所有數據。

編輯: 如果你想蟒蛇的內部:

import os 
os.system('copy *.csv all.csv') 
+1

這是最愚蠢的事情聽說過。 – user2647018

0

你爲附加打開CombinedLog.csv;每次運行此腳本時,都會將更多數據添加到最後,並且舊數據已保留。

否則,你的代碼工作正常,但我會使用csv.writer()格式化輸出行而不是使用','.join();您可以將csv.reader()對象直接填入csv.writer().writerows()方法中,並用它來完成。

我還使用文件對象作爲上下文管理與with聲明並將它們自動關閉:

import csv 
import glob 

with open("CombinedLog.csv", "wb") as fo: 
    fo_writer = csv.writer() 

    csv_files = glob.glob('*.csv') 
    for filename in csv_files: 
    with open(file, "rb") as ifile: 
     reader = csv.reader(ifile) 
     fo_writer.writerows(reader) 
+0

我得到「帶有開放」語法錯誤。我正在運行Python 2.5.1,並從我在網上找到這應該工作,但? – user2647018

+0

將'from __future__ import with_statement'添加到模塊的頂部。 –

+0

我會說實話,我是一個初學Python的人,並且沒有什麼編程經驗,所以我不知道如何添加它? – user2647018