【问题标题】:Writing to text files in Python 3.4在 Python 3.4 中写入文本文件
【发布时间】:2014-06-16 08:10:53
【问题描述】:

我已经简化了我的问题。

此代码仅将 list.txt 文件的最后一个文本行后跟 CR/LF 写入 newlist.txt 文件。怎么会。它将所有条目打印到屏幕上的一行,但只将最后一行写入文件。

这是我关于这个主题的第一篇文章的症结所在,但我正在努力简化问题

f = open("list.txt","r")
for line in f:
    print(line)
    output = open("newlist.txt",'w', newline="\r\n")
    output.write(line)
f.close()

【问题讨论】:

  • 您使用什么语言?看起来像 Python?
  • 抱歉,是 Python
  • 你到底想做什么?
  • 好吧,我有一个更复杂的问题,但这是它的核心。在此示例中,我想获取一个文件并将其写入另一个文件。我的真实脚本需要一堆 ping 输入并将其写入文件。但它有同样的问题。
  • 那为什么不使用awk 之类的呢?简单的任务更容易。

标签: text python-3.x output


【解决方案1】:

您在每次迭代中重新打开文件。不要!

考虑到您交出的w 标志,open() 函数(无论是哪种语言)肯定会在文件写入之前清空文件。您可能想要使用 a 标志,大多数语言都使用它来“附加”到文件:

output = open("newlist.txt",'a', newline="\r\n")

但这仍然意味着您在每次迭代中都重新打开文件,这非常慢。在循环之前打开文件一次 更有意义。然后你可以限制自己在迭代中写入已经打开的文件。我不知道python,但可能这就是你要找的:

f = open("list.txt","r")
o = open("newlist.txt",'w', newline="\r\n")
for line in f:
    print(line)
    o.write(line)
o.close()
f.close()

@eryksun 在下面的评论中建议使用 python 的 with 构造来获得更优雅和强大的解决方案(这是 python,对吗?)。我冒昧地在此处包含该建议,因为它显然是有道理的。我希望我没看错:

with open("list.txt") as f, open("newlist.txt", "w", newline="\r\n") as o:
    for line in f:
        print(line)
        o.write(line)

对我来说看起来非常直接和合乎逻辑,if python 会按照@eryksun 的状态进行清理。

【讨论】:

  • 我是 Python 新手,所以不明白你的答案。如何循环文件。我了解 readlines,但我正在尝试尽可能简单地解决问题。
  • 大声笑,一个新手 pythoneer 试图帮助另一个。太好了。
  • 哈!你做到了!是的,是的,是的,它只是覆盖了文件。现在我可以解决我的全面问题了!!!!谢谢你。是的,我知道这很笨拙,但我现在是 Python 的菜鸟
  • @eryksun 感谢您的建议!我冒昧地将其包含在上面的答案中,希望您能接受吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 2023-02-08
  • 1970-01-01
  • 2021-10-17
  • 2015-07-02
  • 2018-11-11
相关资源
最近更新 更多