逐行合并.csv文件中的多个.txt文件

时间:2019-07-04 14:17:24

标签: python csv

我有一个包含很多.txt文件的文件夹。我想将所有.txt文件逐行/逐行合并到单个.csv文件中。

我尝试了以下python代码,它们可以正常工作,但是我必须更改.txt文件名才能将内容添加到.csv行中。

import re
import csv
from bs4 import BeautifulSoup
raw_html = open('/home/erdal/Dropbox/Marburg/LA/LT_CORPUS/fsdl.txt')
cleantext = BeautifulSoup(raw_html, "lxml").text 
#print(cleantext)
print (re.sub('\s+',' ', cleantext))
#appending to csv as row
row = [re.sub('\s+',' ', cleantext)]
with open('LT_Corpus.csv', 'a') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerow(row)
csvFile.close()

我希望看到更好,更快的解决方案,以在不更改文件名的情况下实现流程自动化。欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

访问文件名列表

以下内容将使您更接近所需的内容。

import os将使您可以访问os.listdir()函数,该函数列出了目录中的所有文件。如果数据文件与脚本不在同一文件夹中,则可能需要提供数据文件夹的路径。

这应该类似于: os.listdir('/home/erdal/Dropbox/Marburg/LA/LT_CORPUS/')

使用该目录中的所有文件名,然后可以通过for循环解析每个文件名来分别打开每个文件名。

import re
import csv
from bs4 import BeautifulSoup

import os

filenames = os.listdir('/home/erdal/Dropbox/Marburg/LA/LT_CORPUS/')
for file in filenames:
    raw_html = open('/home/erdal/Dropbox/Marburg/LA/LT_CORPUS/' + file)
    cleantext = BeautifulSoup(raw_html, "lxml").text 
    output = re.sub('\s+',' ', cleantext)      # saved the result using a variable
    print(output)                              # the variable can be reused
    row = [output]                             # as needed, in different contexts 
    with open('LT_Corpus.csv', 'a') as csvFile:
        writer = csv.writer(csvFile)
        writer.writerow(row)

其他一些细微差别:我在最后删除了csvfile.close()函数调用。使用with上下文管理器时,当您离开上下文管理器代码块的范围(即with语句下方的缩进部分)时,上下文管理器会自动为您关闭文件。话虽如此,简单地打开csv文件,使其保持打开状态,然后逐个打开txt文件,然后将其内容写入打开的csv并等待,这可能是有益的。关闭csv,直到结束。