2016-08-05 105 views
0

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

在subfolder1文件(subfolder1.pdb)的含量是在这里:

subfolder1.pdb

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

期望的输出文件的内容(subfolder1.txt)为subfolder1 .pdb:

subfolder1.pdb 
12 
xy 
... 
abc 

子文件夹2中的文件(subfolder2.pdb)的内容i在这儿:

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

考虑到您将从不同于您要写入的文件读取的文件进行读取,您将不得不打开多个文件。如果这些文件总是相同的,则只需要执行两个open s。例如,下面的只是每行复制到另一个文件:

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模式,以确保它不是连续地写入还要注意的是,如果输入文件很大,这会做一个很多打开和关闭文件,可能会很慢)。

+0

1)如何选择文件的特定部分? 2)输出文件名称应该与其子文件夹相同。在你的代码中并非如此。 – erhan

+0

1)通过在'写入'调用之前添加一个条件,可以只选择部分文件。 2)解决这个问题很简单:我将输出文件路径作为函数调用的结果。你可以自由地让该函数返回你想要的任何路径名。 – acdr

相关问题