我有一个包含很多.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()
我希望看到更好,更快的解决方案,以在不更改文件名的情况下实现流程自动化。欢迎任何建议。
答案 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
,直到结束。