【发布时间】:2019-03-22 15:21:21
【问题描述】:
**标记为重复的帖子没有回答我的问题。我问如何写入多个文件,而不是读取。另外我问我是否可以将我所有的文件名放在一个变量中并从那里调用它而不是有很多 with 语句。
我正在尝试读取一个文件,然后在我遍历一个文件后写入多个文件。
我想要做的基本上是打开一个文件,复制文件的一部分(帐号直到 N - 未开票)。然后将我复制的内容写入两个文件。注意:我想循环两次,所以我可以复制一个帐号,直到 N-NOT BILLED 然后再次循环并复制下一个帐号,直到 N-NOT BILLED。另外,有什么方法可以将我写入的所有文件放入一个变量中。多次输入“with open”似乎是多余的,尤其是当我有两个以上的文件要写入时。
我尝试遍历帐号,但它对我不起作用。
account_num = ['1121-17100', '19494-07423']
writing = False
with open('file1.txt', 'r') as original_file:
with open('CITY OF MIAMI.TXT', 'w') as new_file:
with open('RICHARD MANAGEMENT.txt', 'w') as new_file2:
for account in account_num:
for line in original_file:
if account in line.strip():
writing = True
if writing:
new_file.write(line)
new_file2.write(line)
if 'N - NOT BILLED' in line.strip():
writing = False
【问题讨论】:
-
如果您愿意,可以将您的
with语句合并到一行中,例如with open('f1.txt') as f1, open('f2.txt') as f2, open('f3.txt') as f3: ...。但更重要的是,您可能应该交换两个for循环位置。按照您的方式,文件光标将在您到达account_num中的下一项之前终止,因此它失败了。如果你只是交换订单,你应该没问题。 -
“我试图循环访问帐号,但它对我不起作用。”缺少什么预期功能?
-
约旦感谢您的意见,我将巩固它。至于交换 for 循环......它确实有效,但它在两个文件中都重复了它们。
-
“但它在两个文件中都复制了它们。”:如果你这样做了
new_file.write(line); new_file2.write(line),你会期待什么。您的逻辑缺少account和filename之间的映射。使用dict,例如{'1121-17100':'CITY OF MIAMI.TXT']´},而不是list -
而不是使用 new_file.write(line) 使用字典?
标签: python