使用字典编写文本文件时遇到问题?

时间:2014-12-31 23:36:53

标签: python file loops dictionary

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-ami的所有内容都是小写的。我试图大写它们并重写它。但似乎无法弄明白。

2 个答案:

答案 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()

这应该可以解决您的问题。我现在无法运行,请告诉我您是否遇到问题。