【问题标题】:How to add content on every line of file in python?如何在python中的每一行文件上添加内容?
【发布时间】:2019-02-22 22:16:32
【问题描述】:

我有至少 100k 行的 .dat 文件。我想使用 python 在每一行的末尾添加一些内容。我有多个 .dat 文件,如果可能,请告诉我如何处理所有文件,并在行尾添加内容并将它们保存到另一个目录。

【问题讨论】:

  • 是的。向我们展示您的尝试或您的想法。提示:打开输入和输出文件,然后循环:从输入读取行,修改行,将行写入输出。

标签: python


【解决方案1】:

如果所有文件都在一个目录中,您可以使用glob 模块获取所有这些文件,否则您需要使用os.walkos 模块遍历目录。

然后您将遍历从上述函数获得的每个文件名。

在本次迭代中,您将首先在另一个目录中创建一个新文件 (open(..., 'w+')),然后打开您要修改的文件 (open(..., 'r'))。

然后您将开始迭代要修改其内容的文件的内容:

with open(target, 'w+') as tf:
  with open(source, 'r') as sf:
    for line in sf:
      tf.write(line[:-1] + ' appended content\n')

[:-1] 删除当前行中的换行符 (\n),如果您的文件包含 \r\n 作为换行符,您可能需要使用 [:-2]

for line in sf: 使用了生成器,这意味着源文件的内容在开始时并没有完全加载到内存中,而只是当前需要的内容。

【讨论】:

  • "如果您的文件包含 \r\n 作为换行符,您可能需要使用 [:-2]": no as text mode strips \r
  • @Jean-FrançoisFabre 感谢您提供的信息,我不知道。但是我现在有点困惑,因为stackoverflow.com/a/14754094/277267
  • 二进制模式问题都与您是否处理 Windows 文件有关,以及您想如何处理它们。我在这里没有看到任何关于 Windows 的提及,所以也许没关系。如果您正在阅读文本文件,通常需要使用“r”和“w”。这将为您所在的平台使用 EOL 字符做“正确的事情”。您将读取任何类型的文件,并为您所在的平台编写文件。这里唯一的问题是,如果您在一个平台上并且想要以另一种平台的格式编写文件,那么添加“b”将无济于事。
  • @JoeAdmin 是的,我经常这样做,有大量脚本在 Windows 上编写文本文件并在 Linux 上读取它们,反之亦然,也许这引起了我的困惑,导致我始终仔细检查结尾是什么,并根据需要使用[:-1]/[:-2]。但是现在知道open 的文本变体可能对我有所帮助。
  • 是的,“r”确保您在行尾始终只有 '\n'
猜你喜欢
  • 2018-06-15
  • 2020-04-18
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多