Python不断地在同一行写入文件

时间:2014-09-04 00:29:50

标签: python

我有一个代码,它会增加同一行的数量。当我打开文件并打印时,它产生的输出与原始文件一样正确的缩进。但是当我写入文件时,它的写入输出在同一行上

编码:

import re

numbers = {}
with open('1.txt') as f,open('10.txt') as f1:
    for line in f:
        row = re.split(r'(\d+)', line.strip())
        words = tuple(row[::2])
        if words not in numbers:
            numbers[words] = [int(n) for n in row[1::2]]
        numbers[words] = [n+1 for n in numbers[words]]
        row[1::2] = map(str, numbers[words])
        print(''.join(row))
        f1.write(''.join(row))

的1.txt

hello2 ram2
  hello2 ram2
   hello gate1
hello gate1

写作:

hello3 ram3 hello4 ram4 hello gate2 hello gate3

而不是:

hello3 ram3
  hello4 ram4
   hello gate2
hello gate3

它的写作不断在同一行。请帮助我如何编写文件,因为它在stdout上生成

1 个答案:

答案 0 :(得分:3)

您的代码:

f1.write(''.join(row))

可以修改为此以将换行符打印到输出文件:

f1.write(''.join(row) + '\n')

\n会将行分隔符输出到输出文件。正如另一张海报指出的那样,打开输出文件存在问题。您需要以写入模式'w'打开它,因此您的with语句应为:

with open('1.txt') as f,open('10.txt', 'w') as f1:

另一件事是您在输出时不保留缩进。可以通过以下方式克服:

# Retrieve white space from original line
indentation = (re.match(r"\s*", line).group())
print (indentation + ''.join(row))
f1.write(indentation + ''.join(row) + '\n')

作为评论者发布,在Python3中,您可以直接打印到文件而不是使用write。所以这也是完全可以接受的(并且更加一致):

print(indentation + ''.join(row), file=f1)