我有一个代码,它会增加同一行的数量。当我打开文件并打印时,它产生的输出与原始文件一样正确的缩进。但是当我写入文件时,它的写入输出在同一行上
编码:
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上生成
答案 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)