如何循环遍历100多个文本文件,并在每个文件的“开始”和“结束”之间复制数据

时间:2019-08-12 17:50:47

标签: python python-3.x

我试图弄清楚如何从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')

2 个答案:

答案 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))