我试图弄清楚如何从100多个文本文件中复制数据,所有文本文件都有两个锚点,分别是带有“开始”的行和带有“结束”的另一行。我想抓住这两个锚点以及它们之间的所有数据,然后将所有内容复制/粘贴到单个文本文件中。
下面的代码在“开始”和“结束”之间复制数据,但是这两个锚点已脱落。最后,我想在“结束”之后写上打开的文本文件的名称。这是我的示例代码。
import os
directory = 'C:\\my_path_in\\all_files\\'
for filename in os.listdir(directory):
with open(directory + filename) as infile, open('C:\\my_path_out\\AllData.txt', 'a') as outfile:
copy = False
for line in infile:
if line.strip() == 'START':
copy = True
elif line.strip() == 'END':
copy = False
elif copy:
outfile.write(line)
在上面的示例中,我想将以下内容写入“ AllData.txt”
START
Store_Code
Sector
Zone
Zip
END
lamr.txt
然后,继续循环浏览所有文件并继续附加到AllData.txt
这是我的最终可行的解决方案。
import os
directory = 'C:\\Users\\rshuell\\Desktop\\all_files\\'
for filename in os.listdir(directory):
with open(directory + filename) as infile, open('C:\\Users\\rshuell\\Desktop\\AllData.txt', 'a') as outfile:
try:
print(filename)
data = infile.readlines()
outfile.write(filename+"\n"+"".join(data[data.index('START-OF-FIELDS\n'):data.index('END-OF-FIELDS\n')+1])+filename+"\n")
infile.close()
outfile.close()
except:
print(filename + ' is throwing an error')
答案 0 :(得分:3)
开始和结束未写入文件。当一行等于“开始”或“结束”时,循环继续,并且永远不会到达“ elif copy”语句。
您可以通过在将copy设置为true之后添加outfile.write(“开始”)来解决此问题,而在将copy设置为false时添加另一个问题。
要在每个“结束”之后添加打开的文件的名称:每次完成文件复制后,将文件名称写入“ outfile”。
答案 1 :(得分:2)
您尝试过类似的方法吗?如果使用内置的readlines()函数,它将生成文本文件的所有行作为列表。然后,您可以找到包含“开始”和“结束”的列表的索引,并对行列表进行切片并将其重写为新文件
import os
directory = 'C:\\my_path_in\\all_files\\'
create_file = open('AllData.txt', 'w')
for file in os.listdir(directory):
f = open(file, 'r')
lines = f.readlines()
f.close()
start = [lines.index(line) for line in lines if 'start' in line.lower()][0]
end = [lines.index(line) for line in lines if 'end' in line.lower()][0]
copy = lines[start:end+1]
for line in copy:
create_file.write(line)
create_file.write(str(file))