将文件的一部分写入另一个文件

时间:2016-08-05 08:47:13

标签: python

我想在主目录中逐行读取输入文件(input.txt)。此输入文件由某些子文件夹(subfolder1,subfolder2,...)的名称组成。每个子文件夹都包含一个具有相同名称的文件(例如subfolder1包含subfolder1.pdb)。代码将从input.txt中读取每个子文件夹的名称,并进入每个子文件夹。然后它将写入一个新文件(例如subfolder1.txt)文件的特定部分("文件名" line和" abc"行之间的部分)(例如subfolder1。 pdb)在每个子文件夹中(例如子文件夹1)。我怎么能这样做?

子文件夹1中的文件(subfolder1.pdb)的内容位于:

subfolder1.pdb

subfolder1.pdb
12
xy
...
abc
kl
...

subfolder1.pdb的所需输出文件( subfolder1.txt )的内容:

subfolder1.pdb
12
xy
...
abc

子文件夹2中的文件(subfolder2.pdb)的内容如下:

subfolder2.pdb

subfolder2.pdb
54
mn
...
abc
xy
...

subfolder1.pdb所需输出文件( subfolder2.txt )的内容:

subfolder2.pdb
54
mn
...
abc

我尝试使用的代码如下。我不知道如何完成它。

#!/usr/bin/python
import os

with open("input.txt", "r") as f:
    for line in f:
        os.chdir(line.strip())

        #do something

        os.chdir('..')

1 个答案:

答案 0 :(得分:1)

考虑到您将从与您要写入的文件不同的文件中读取,您将不得不打开多个文件。如果它们始终是相同的文件,则只需要执行两次open。例如,以下内容只是将每一行复制到另一个文件:

with open("input.txt", "r") as inp_f:
    with open("output.txt", "w") as out_f:
        for line in inp_f:
            out_f.write(line)

如果你需要使输出文件取决于输入文件的每一行,你可以先打开所有可能的输出文件,然后循环输入文件,写入你需要的任何文件,或者你只能根据需要打开每个输出文件。例如:

with open("input.txt", "r") as inp_f:
    for line in inp_f:
        output_file_path = some_function(line)
        with open(output_file_path, "a") as out_f:
            out_f.write(line)

(注意我在a ppend模式下打开输出文件,以确保它不会被连续覆盖。另请注意,如果输入文件很大,这将打开很多和关闭文件,这可能会很慢。)