【问题标题】:Writing line by line to a file?逐行写入文件?
【发布时间】:2015-01-06 16:44:45
【问题描述】:

我正在读取一个.txt 文件来创建一个我称之为irTable 的字典。它包含我称为 dId(设备 ID)的 Key,然后是 3 个值,标签、频率、状态。

现在我可以很好地阅读和附加字典,但是我无法理解将这些更改逐行重写到 .txt 文件的合适方法。

我当前的代码:

def writeFile():
    f = open("test.txt","w")
    for line in irTable: #irTable being the dictionary where my Key and 3 values are.
        print(line, file="test.txt") 
        f.close()

输出此错误:

    print(line, file="test.txt") 
AttributeError: 'str' object has no attribute 'write'

作为参考,我的 .txt 文件的格式:

rm1d1,lamp,100001,False
rm1d2,tv,100002,False
rm2d1,lamp,100003,False

那么如何将我的“新”字典写入此文件?

【问题讨论】:

  • file.write(line) 将为您将一行写入文件。在 for 循环完成之前不要关闭文件。还值得查找用于打开和关闭文件的 with 关键字,因为它是最 Pythonic 的处理方式。
  • 如果irTable 是一个字典,那么line 只是一个键。您想将键和值都写入文件。

标签: python file python-3.x dictionary


【解决方案1】:

printfile parameter 需要一个打开的文件对象作为参数。您应该传递 f 而不是文件名:

print(line, file=f)

那个,或者你可以使用fwrite方法:

f.write(line)

但是请注意,这不会添加像 print 这样的换行符。如果需要,需要手动添加:

f.write(line + '\n')

另外,f.close() 行需要缩进一层。否则,您将在循环的第一次迭代期间关闭文件。当然,最好只使用with-statement

def writeFile():
    with open("test.txt","w") as f:
        for line in irTable:
            print(line, file=f)

完成后,这将自动为您关闭文件。

【讨论】:

  • 使用file.write(line) 可能会更干净。
  • 这也有效。但是这两种方法都做同样的事情,printfile 参数是为执行这样的任务而创建的,所以这确实是一个偏好问题。我只是保持OP的风格。 :)
  • 注意 - print 附加一个换行符,除非你设置了print(line, end=''),而f.write 没有。
  • @iCodez 好的,这就是写作!谢谢,我现在唯一遇到的问题是它只是将密钥写入文件,而不是该密钥的 3 个值。
  • @iCodez 我已经尝试过for a, b, c, d in irTable:,但卸载的值太多...:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多