【问题标题】:for each line in file write line to an individual file in python对于文件中的每一行,将行写入python中的单个文件
【发布时间】:2026-02-04 23:35:01
【问题描述】:

我有一个文本文件,需要逐行分隔成单独的文本文件。所以如果主文件包含字符串:

foo
bar
bla

我将有 3 个文件,可以用数字命名 1.txt(包含字符串“foo”)、2.txt(包含字符串“bar”)和 3.txt(包含字符串“bla”)

直接的方法是打开三个文件进行写入,然后逐行写入每个文件。但问题是当我们有很多行或者我们不知道到底有多少行时。必须创建似乎非常不必要

f1=open('main_file', 'r')
f2=open('1.txt', 'w')
f3=open('2.txt', 'w')
f4=open('3.txt', 'w')

有没有办法在这个操作中放置一个计数器或一个可以处理这种类型询问的库?

【问题讨论】:

    标签: python


    【解决方案1】:

    循环读取文件中的行,保持行号;使用从行号派生的名称打开一个文件,并将该行写入文件:

    f1 = open('main_file', 'r')
    for i,text in enumerate(f1):
        open(str(i + 1) + '.txt', 'w').write(text)
    

    【讨论】:

    • 正是我想要的!我谢谢你!
    【解决方案2】:

    你会想要这样的东西。使用with 是处理文件的首选方式,因为它会在with 范围之后自动为您关闭它们。

    with open('main_file', 'r') as in_file:
      for line_number, line in enumerate(in_file):
        with open("{}.txt".format(i+1), 'w') as out_file:
          out_file.write(line) 
    

    【讨论】:

      【解决方案3】:

      首先,您可以将文件读入一个列表,其中每个元素代表文件中的一行。

      with open('/path/to/data','r') as f:
          data = [line.strip() for line in f]
      

      然后您可以使用 for 循环分别写入文件。

      for counter in range(len(data)):
          with open('/path/to/file/'+str(counter),'w') as f:
              f.write(data[counter])
      

      注意事项: 由于您不断打开大量文件,我强烈建议您使用

      with open() as f:
          #your operation
      

      使用它的好处是可以确保 Python 按时释放资源。 细节: What's the advantage of using 'with .. as' statement in Python?

      【讨论】:

      • 无需将文件内容具体化为列表,直接遍历行即可。
      最近更新 更多