簡體   English   中英

合並多個csv文件並將文件名存儲為變量-Python

[英]Merging several csv files and storing the file names as a variable - Python

我正在嘗試使用python將多個csv文件附加到單個csv文件中,同時將文件名(或更好的是,文件名的子字符串)添加為新變量。 所有文件都有標題。 以下腳本可完成合並文件的技巧,但不會將文件名視為變量問題:

import glob

filenames=glob.glob("/filepath/*.csv")

outputfile=open("out.csv","a")

for line in open(str(filenames[1])):
 outputfile.write(line)

for i in range(1,len(filenames)):
  f = open(str(filenames[i]))
  f.next() 
  for line in f:
     outputfile.write(line)

outputfile.close()

我想知道是否有什么好的建議。 我有大約25k的小型csv文件(每個文件少於100KB)。

簡單的更改將實現您想要的:對於第一行

outputfile.write(line) -> outputfile.write(line+',file')

然后

outputfile.write(line+','+filenames[i])

您可以使用Python的csv模塊為您解析CSV文件並格式化輸出。 示例代碼(未經測試):

import csv

with open(output_filename, "wb") as outfile:
    writer = None
    for input_filename in filenames:
        with open(input_filename, "rb") as infile:
            reader = csv.DictReader(infile)
            if writer is None:
                field_names = ["Filename"] + reader.fieldnames
                writer = csv.DictWriter(outfile, field_names)
                writer.writeheader()
            for row in reader:
                row["Filename"] = input_filename
                writer.writerow(row)

一些注意事項:

  • 始終使用with打開文件。 這樣可以確保在您完成處理后將再次關閉它們。 您的代碼無法正確關閉輸入文件。
  • CSV文件應以二進制模式打開。
  • 在Python中,索引從0開始。 您的代碼將跳過第一個文件,並在第二個文件中包含兩次行。 如果只想遍歷列表,則無需在Python中使用索引。 只需for x in my_list使用for x in my_list

暫無
暫無

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

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