【问题标题】:Having trouble using a dictionary to write text file?使用字典编写文本文件时遇到问题?
【发布时间】:2014-12-31 23:36:52
【问题描述】:
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 全部小写。我正在尝试将它们大写并重写它。但似乎不太明白。

【问题讨论】:

    标签: python file loops dictionary


    【解决方案1】:

    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)
    

    【讨论】:

    • ...当我在这样做之后加载 new_file 时,我得到了重复的字符串。示例:“我不喜欢他们,我是我。我不喜欢他们,我是我。” ..知道为什么会这样吗?
    • 因为它是在for循环中写的。这就是为什么你看到那个字符串的次数太多了。
    • @Andrea - 查看我的编辑。你的write 线太远了。
    【解决方案2】:
    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()
    

    这应该可以解决您的问题。我现在无法运行它,如果您有问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多