[英]Combining multiple csv files into one csv file
我試圖將多個csv文件合並為一個,並嘗試了許多方法,但我正在努力。
我從多個csv文件導入數據,當我將它們一起編譯成一個csv文件時,似乎前幾行很好地填充,但隨后它開始隨機輸入行之間的可變數字空格,它從不完成填寫組合的csv文件,它似乎不斷地添加信息,這對我沒有意義,因為我正在嘗試編譯有限數量的數據。
我已經嘗試為該文件編寫close語句,我仍然得到相同的結果,我指定的組合csv文件永遠不會停止獲取數據,它會隨機分配整個文件中的數據 - 我只想要一個正常編譯的csv。
我的代碼中有錯誤嗎? 有沒有解釋為什么我的csv文件這樣做?
csv_file_list = glob.glob(Dir + '/*.csv') #returns the file list
print (csv_file_list)
with open(Avg_Dir + '.csv','w') as f:
wf = csv.writer(f, delimiter = ',')
print (f)
for files in csv_file_list:
rd = csv.reader(open(files,'r'),delimiter = ',')
for row in rd:
print (row)
wf.writerow(row)
你的文件有相同的結構嗎? 他們需要加入以下信息,如果不是不一致的話。 如果它不是變量,則可以映射數據以生成最終文件。
在您的代碼上,它是正確的,但是要合並文件,您可以簡單地使用“cat”命令,以防您使用類Unix操作系統(Linux,MacOS等),但如果您有幾個文件不同的結構,所以是的python將是完美的。 但對於這種情況,您的代碼將需要一些修改。
你的代碼適合我。
或者,您可以按如下方式合並文件:
csv_file_list = glob.glob(Dir + '/*.csv')
with open(Avg_Dir + '.csv','w') as wf:
for file in csv_file_list:
with open(file) as rf:
for line in rf:
if line.strip(): # if line is not empty
if not line.endswith("\n"):
line+="\n"
wf.write(line)
或者,如果文件不是太大,您可以一次讀取每個文件。 但在這種情況下,所有空行都將復制標題:
csv_file_list = glob.glob(Dir + '/*.csv')
with open(Avg_Dir + '.csv','w') as wf:
for file in csv_file_list:
with open(file) as rf:
wf.write(rf.read().strip()+"\n")
考慮幾個調整:
with
用於讀取和寫入過程兩者。 這樣就不需要close()
文件對象,而這些文件對象不會對read
對象執行。 newline=''
中open()
或lineterminator="\\n"
中參數csv.writer()
查看前者和后者的 SO答案。 os.path.join()
來正確連接文件夾和文件路徑。 這種方法是不可知的,所以使用前向或反斜杠類型來說明Windows或Unix機器。 調整后的腳本:
import os
import csv, glob
Dir = r"C:\Path\To\Source"
Avg_Dir = r"C:\Path\To\Destination\Output"
csv_file_list = glob.glob(os.path.join(Dir, '*.csv')) # returns the file list
print (csv_file_list)
with open(Avg_Dir + '.csv', 'w', newline='') as f:
wf = csv.writer(f, lineterminator='\n')
for files in csv_file_list:
with open(files, 'r') as r:
next(r) # SKIP HEADERS
rr = csv.reader(r)
for row in rr:
wf.writerow(row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.