2016-08-05 163 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

相關問題