text = open('samiam.txt', 'r+')
replacement = {" i ": " I ", "-i-": "-I-"}
new_file = open('newfile.txt', 'w')
for line in text:
for k in replacement.items():
line.replace(k, v)
new_file.write(line)
text.close()
new_file.close()
我运行它,它说v
没有定义。如果我重写它for k, v
然后它没有此错误,但文件不会更改。文本文件只是sam-i-am
,i
的所有内容都是小写的。我试图大写它们并重写它。但似乎无法弄明白。
答案 0 :(得分:4)
将for k
更改为for k, v
是正确的,因为dict.items
会产生键/值对。您的文件未更新的原因是因为str.replace
无法就地工作。字符串在Python中是不可变的,因此该方法总是返回一个新字符串。
这意味着这一行:
line.replace(k, v)
实际上是无操作。要解决此问题,只需将line
重新分配给此字符串,以便更新其值:
line = line.replace(k, v)
此外,new_file.write(line)
行应缩减一级:
for line in text:
for k, v in replacement.items():
line.replace(k, v)
new_file.write(line) # <-- moved back one level
否则,您将为replacement
字典中的每个项目写入文件。
最后,您可以使用with-statement在完成后自动关闭文件:
replacement = {" i ": " I ", "-i-": "-I-"}
with open('samiam.txt', 'r+') as text, open('newfile.txt', 'w') as new_file:
for line in text:
for k, v in replacement.items():
line = line.replace(k, v)
new_file.write(line)
答案 1 :(得分:1)
text = open('samiam.txt', 'r+')
replacement = {" i ": " I ", "-i-": "-I-"}
new_file = open('newfile.txt', 'w')
for line in text:
for k in replacement.keys():
line=line.replace(k, replacement[k])
new_file.write(line)
text.close()
new_file.close()
这应该可以解决您的问题。我现在无法运行,请告诉我您是否遇到问题。