【问题标题】:Write new text data to text file without overwriting the previous data in python将新的文本数据写入文本文件而不覆盖python中的先前数据
【发布时间】:2019-06-13 19:30:47
【问题描述】:

我有一个随着迭代不断变化的字符串列表。我想将元素列表写入文本文件。当列表发生变化时,我想更新文本文件而不覆盖旧数据。

我尝试使用 append 方法执行此操作,但我不知道为什么每次运行代码时它都会给我一个错误。 它给出了以下错误:

AttributeError: '_io.TextIOWrapper' 对象没有属性 'append'

matches = ['Steve', 'Kaira', 'Wokes']

with open('textfile.txt','a') as f:
    for match in matches:
        f.append(match)

【问题讨论】:

  • 下次列表是 ['Michael', 'John' ,'Lita'] ...我希望文本文件是... Steve Kaira Wokes Michael John Lita
  • 是什么让你认为f 有一个append 方法?
  • 我想它会的,我是 python 的新手。
  • 改用f.write(match + '\n')
  • @khelwood 你解决了我的问题,f.write 有效。

标签: python python-3.x


【解决方案1】:

文件对象没有任何属性append 是您错误的原因。 python 中的文件对象没有名为append() 的函数。而是在附加模式下使用write()。 见此链接:Python - AttributeError: '_io.TextIOWrapper' object has no attribute 'append'

看这个例子:

urls = open("urlfile.txt","a")
for image_url in image_urls:
    urls.write(image_url + "\n")
urls.close()

【讨论】:

  • 由于 OP 的代码正确地使用了 with 块,不幸的是给他们代码做事的方式更糟。
  • 我只是指出了一个使用 write() 而不是 append() 的示例;这是我手头的代码
  • 就其本身而言,您的答案并没有错。但考虑到 OP 问题的上下文,我建议将您的答案提供给与 OP 类似的设置,即使用相同的变量名(例如 f)和相同的结构(例如 Pythonic with-block),除非有有充分的理由不这样做。这样,读者会更好地理解发生了什么变化:“哦,所以我需要将 .append 更改为 .write。”有些人可能会混淆 open() 和 .close() 是如何出现的,或者为什么使用它而不是 with-block。
猜你喜欢
  • 2016-04-25
  • 2011-07-27
  • 2011-05-08
  • 2012-04-15
  • 2020-03-28
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多