【问题标题】:Convert all text files in directory to strings (each txt file becomes 1-line)将目录中的所有文本文件转换为字符串(每个txt文件变成1行)
【发布时间】:2019-01-26 02:11:09
【问题描述】:

我有一个文件夹,其中包含几个要转换为字符串的.txt 文件。

我想将它们中的每一个都转换为字符串,输出是 1 个文件,每个文件包含一行文本,或者将所有源文件组合成 1 个文件,其中每个源文件只有 1 行文本。

有没有办法通过globfnmatch 使用以下代码来做到这一点:

open("data.txt").read().replace('\n', '')

【问题讨论】:

  • 您希望将每个.txt 文件的内容 写入结果输出文件的一行中吗?
  • 要使用glob.glob(),只需将问题中的代码放在for filename in glob.,glob("*.txt"): 循环中,然后在对open() 的调用中使用filename 而不是硬编码"data.txt"。另请注意,您可能希望将 \n 字符更改为某些内容,而不是删除它以保留它们曾经出现的位置。当然,替换字符必须是文件的实际文本中不能包含的内容...
  • 我很好奇,这两个选项有什么区别? “...输出是 1 个文件,每个文件包含一行文本,或者将所有源文件组合成 1 个文件,其中每个源文件只有 1 行文本。”
  • '@Mad Physicist 回复:差异。 btn。多个 1 行文件或单个文件...方便任何想用一些代码回答的人,因为我可以轻松地加入文件或拆分文件。这些文件中的每一个都以相同的字符串开头并以唯一的字符串结尾。

标签: python text


【解决方案1】:

使用您的代码,这将创建“1 个文件,每个文件包含一行文本”:

import glob, os

myfolder = 'folder' # name of your folder containing `.txt

with open('data.txt', 'w') as outfile:
    for txtfile in glob.glob(os.path.join(myfolder,  "*.txt")):
        with open(txtfile, 'r') as f:
            outfile.write(f.read().replace('\n',''))

【讨论】:

  • 在循环之外打开输出文件可能是一个更好的主意。你绝对不需要 + 模式。
  • 您还应该小心关闭输入文件,可能使用 with 块。
  • 我打算建议将最后一个工作块放在 for 循环周围,并打开 w 的文件。这样您就不必将所有行都保存在内存中并进行昂贵的列表扩展。
  • 谢谢,仍在尝试理解您的建议 - 是不是更像这样?
  • 是的。 +1。最后一点:你不再需要数据了。
猜你喜欢
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
相关资源
最近更新 更多