【发布时间】:2020-03-03 15:05:15
【问题描述】:
我对编码比较陌生,但由于我必须写几个字母,所以我想编写一个脚本来自动更改这封信中的名称。
我有一个包含名称占位符的文本文件和一个 csv 文件,其中名称以以下格式存储:
Surname;Firstname
Doe;John
Norris;Chuck
...
现在我想出了这个脚本:
import csv
import re
letterPATH = "Brief.txt"
tablePATH = "Liste.csv"
with open(letterPATH, "r") as letter, open(tablePATH, "r") as table:
table = csv.reader(table, delimiter=";")
rows = list(table)
rows = rows[1::]
print(rows)
for (surname, firstname) in rows:
#Check if first- and surname have correct output
#print(firstname)
#print(surname)
for lines in letter:
new_content = ""
print(lines)
lines = re.sub(r"\<Nachname\>", surname, lines)
print(lines)
lines = re.sub(r"\<Vorname\>", firstname, lines)
print(lines)
new_content += lines
with open(surname + firstname +".txt", "w") as new_letter:
new_letter.writelines(new_content)
我现在遇到以下问题: 有一个文件为每个条目创建了一个文本文件(JohnDoe.txt、ChuckNorris.txt 等),但是只有第一个文件具有正确的内容,而其他文件是空的。
在调试时,我发现第 18 行中的 for 循环只迭代了一次,而 with 语句按应有的方式迭代了多次。 我只是不明白为什么 for 循环不迭代。
干杯并感谢您的帮助! :)
【问题讨论】:
-
在循环的第一次迭代中阅读了
letter中的所有行后,您位于该文件的末尾 - 进一步读取将不会返回任何内容,因为没有什么可进一步阅读的了。在循环开始之前,您每次都需要倒带文件(letter.seek(0)),或者将整个文件读入一个列表。
标签: python loops file for-loop