我想在主目录中逐行读取输入文件(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('..')
答案 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模式下打开输出文件,以确保它不会被连续覆盖。另请注意,如果输入文件很大,这将打开很多和关闭文件,这可能会很慢。)