PYTHON从参考文件中多次打印

时间:2013-07-31 17:22:20

标签: python string file reference repeat

我对python编程有疑问。

如果我有一个像

这样的参考文件(ref.txt)
3
5
6

我想创建一个输出文件,如果我想要这些字符串的5倍

3
5
6
3
5
6
3
5
6
3
5
6
3
5
6
总共15行。

我想过像

这样的代码
with open('ref.txt') as f1, open('out.txt', 'w') as f2:
     for i in range(1, 6):
           for line in f1:
               value=line.split()
               line=' '.join(value) + '\n'

               f2.write(line)

此代码只打印原始值。如何打印多条参考值的重复行。

感谢。

2 个答案:

答案 0 :(得分:4)

repeat = ""
with open('ref.txt') as f1:
    for line in f1:
        repeat = "".join([repeat, line])
with open('out.txt', 'w') as f2:
    f2.write(repeat*5)

答案 1 :(得分:2)

Stephan的回答解释了如何做到这一点,但没有解释你的尝试有什么问题:

with open('ref.txt') as f1, open('out.txt', 'w') as f2:
     for i in range(1, 6):
           for line in f1:
               value=line.split()
               line=' '.join(value) + '\n'

               f2.write(line)

您遇到了一个小问题,因为range(1, 6)中只有5个值(print出来并看到);你想在这里range(6)

但这里的主要问题是你只打开ref.txt一次,但试图重复迭代它。您不能使用文件或任何其他类型的迭代器。迭代器的整个点在迭代时会被“用完”。

有四种基本解决方案:


如果你有办法“重置”迭代器,你可以每次循环都这样做。大多数迭代器不能这样做,但文件可以seek

with open('ref.txt') as f1, open('out.txt', 'w') as f2:
    for i in range(6):
        for line in f1:
            value=line.split()
            line=' '.join(value) + '\n'
            f2.write(line)
        f1.seek(0)

或者,如果你可以(足够便宜)每次通过循环获得一个新的,干净的迭代器,你就可以这样做。在这种情况下,这只是意味着每次都打开文件:

with open('out.txt', 'w') as f2:
    for i in range(6):
        with open('ref.txt') as f1:
            for line in f1:
                value=line.split()
                line=' '.join(value) + '\n'
                f2.write(line)

或者,在某些情况下,你有一个可重用的可迭代(如list),你可以从中获得迭代器,你只需使用它而不是迭代器。但这不适用于此。


最后,您可以通过将值存储在list或其他可重复类型(如字符串)中来创建可重用的可迭代。例如:

with open('ref.txt') as f1:
    lines = list(f1)
with open('out.txt', 'w') as f2:
    for i in range(6):
        for line in lines:
            value=line.split()
            line=' '.join(value) + '\n'
            f2.write(line)

您可能希望将部分或全部处理移动到第一个块中,因此您不会连续6次执行此操作。例如:

with open('ref.txt') as f1:
    lines = [' '.join(line.split()) + '\n' for line in f1]
with open('out.txt', 'w') as f2:
    for i in range(6):
        for line in lines:
            f2.write(line)

一旦你有了这个,你可以进一步改进它:

with open('ref.txt') as f1:
    lines = [' '.join(line.split()) + '\n' for line in f1]
data = ''.join(lines)
with open('out.txt', 'w') as f2:
    for i in range(6):
        f2.write(data)

更进一步:

with open('ref.txt') as f1:
    lines = [' '.join(line.split()) + '\n' for line in f1]
data = ''.join(lines)
with open('out.txt', 'w') as f2:
    f2.write(data * 6)