簡體   English   中英

在python中將多個文件循環到單個csv文件中

[英]Looping multiple files into a single csv file in python

我正在嘗試使用python將多個文件處理為單個合並的csv文件。 到目前為止,我有

files = ["file1.txt", "file2.txt", "file3.txt"]

def doSomething(oldfile):
    content = []
    with open oldfile as file:
        content = file.read().splitlines()
    file.close()
    return content.reverse()

with open("newfile.txt", "w") as file:
    w = csv.writer(file, dialect = "excel-tab")
    for i in range(0, len(files)):
        w. writerows(doSomething(files[i])
file.close()

正在創建新文件,但其中沒有任何內容。 我很好奇發生了什么。

謝謝!

對於初學者, list.reverse()在原地反轉列表,並且不返回任何內容,因此您實際上是從doSomething()函數返回None 您實際上需要將其分為兩行:

content.reverse()
return content

如果您想簡化代碼,這里有一個建議:

def doSomething(oldfile):
    with open(oldfile, "r") as f:
        return reversed(f.read().splitlines())

files = ["file1.txt", "file2.txt", "file3.txt"]

with open("newfile.txt", "wb") as file:
    w = csv.writer(file, dialect = "excel-tab")
    for current_file in files:
        w.writerows(doSomething(current_file))

我認為您的程序崩潰有幾個原因:

  1. open(..)是一個函數 ,因此您不能編寫:

     with open oldfile as file: 
  2. 文件的with語句用於強制關閉文件,因此file.close()實際上不是必需的。

  3. .reverse() 就地工作 :它返回None ,您可以為此使用reversed(..)

您可以使用以下方法修復它:

files = ["file1.txt", "file2.txt", "file3.txt"]

def doSomething(oldfile):
    content = []
    with open(oldfile,'r') as file:
        return list(reversed(file))

with open("newfile.txt", "w") as file:
    w = csv.writer(file, dialect = "excel-tab")
    for oldfile in files:
        w.writerows(doSomething(oldfile))

我還在列表上使用了for循環,而不是索引,因為那更像是“ pythonic ”。 此外, file可在其行上進行迭代。 因此,可以使用reversed(file)獲取reversed(file)的行。

暫無
暫無

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

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