使用readlines()将模板txt文件写入'x'个新文件

时间:2018-03-20 10:49:54

标签: python python-3.x python-2.7

我有一个模板txt文件。这个模板需要写成10个新文件,然后我可以根据某些条件(与问题无关)对每个文件进行修改。

我按如下方式阅读了我的模板文件:

with open('template.txt', 'r') as template_file:
     file_lines = template_file.readlines()
     file_lines = [line.rstrip('\n') for line in file_lines]
     for i in range(10):
         new_file = open('output_%s' % i, 'w')
         new_file.write(file_lines)
     new_file.close()

它不起作用,因为我无法为每个文件写一个列表,它必须是一个字符串,但我不知道如何将该列表中的每个元素写入同一个文件10次...每当我以不同的方式尝试时,我最终会将每一行放在不同的文件上,而不是所有文件中的所有行。

我的逻辑有些不对劲我无法解决。

我可以这样做的另一种方式:

template_file = open('template.txt', 'r')
template_lines = template_file.read()

for i in range(10):
    new_files = open('output_%s' % i, 'w')
    new_files.write(template_lines)

但是我希望能够修改特定的行,这样可以更方便地逐行写入每个新文件(通过readlines())

4 个答案:

答案 0 :(得分:2)

您可以在文件对象上使用python方法writelines(<iterable>)

类似的东西:

with open('template.txt', 'r') as template_file:
    file_lines = template_file.readlines()
    file_lines = [line.rstrip('\n') for line in file_lines]
    for i in range(10):
        with open('output_%s' % i, 'w') as new_file:
            new_file.write_lines(file_lines)

也不确定您是否需要rstrip('\n') readlines()已经应该删除新行。

答案 1 :(得分:0)

尝试缩进new_file.close(),以便在每次for循环后保存它

答案 2 :(得分:0)

我不完全明白你想要达到的目标。无论如何,这里是一个代码片段,说明如何将相同的行写入10个文件中的每一个:

with open('template.txt', 'r') as template_file:
    file_lines = template_file.readlines()
    file_lines = [line.rstrip('\n') for line in file_lines]
    for line in file_lines:
        for i in range(10):
            new_file = open('output_%s' % i, 'a') # appending content
            new_file.write(line)
            new_file.close()

甚至是这个,如果您愿意:

with open('template.txt', 'r') as template_file:
    file_lines = template_file.readlines()
    file_lines = [line.rstrip('\n') for line in file_lines]
    for i in range(10):
        new_file = open('output_%s' % i, 'w')
        for line in file_lines:
            new_file.write(line)
        new_file.close()

答案 3 :(得分:0)

writelines方法完成了这项工作。

with open(TRANSFER_SKED, 'r') as template_file:
    file_lines = template_file.readlines()
    # file_lines = [i.rstrip('\n') for i in file_lines]

    for i in range(10):
        with open('output_%s.txt' % i, 'w') as new_file:
            new_file.writelines(file_lines)