2016-08-05 4 views
0

Je souhaite lire un fichier d'entrée (input.txt) ligne par ligne dans un répertoire principal. Ce fichier d'entrée est constitué du nom de certains sous-dossiers (sous-dossier1, sous-dossier2, ...). Chaque sous-dossier contient un fichier (par exemple le sous-dossier 1 contient subfolder1.pdb) avec le même nom. Le code lira le nom de chaque sous-dossier à partir du fichier input.txt et entrera dans chaque sous-dossier. Ensuite, il écrira dans un nouveau fichier (par exemple subfolder1.txt) une partie spécifique (la partie entre la ligne "nom de fichier" et la ligne "abc") d'un fichier (par exemple subfolder1.pdb) dans chaque sous-dossier (par exemple sous-dossier1). Comment puis je faire ça?écrire une partie d'un fichier dans un autre fichier

Le contenu du fichier (subfolder1.pdb) dans subfolder1 est ici:

subfolder1.pdb

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

Le contenu du fichier de sortie souhaité (subfolder1.txt) pour subfolder1 pdb:

subfolder1.pdb 
12 
xy 
... 
abc 

le contenu du fichier (subfolder2.pdb) dans dossier2 i s ici:

subfolder2.pdb

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

Le contenu du fichier de sortie souhaité (de subfolder2.txt) pour subfolder1.pdb:

subfolder2.pdb 
54 
mn 
... 
abc 

Le code que j'essaie d'utiliser est inférieure à. Je ne sais pas comment le terminer.

#!/usr/bin/python 
import os 

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

     #do something 

     os.chdir('..') 

Répondre

1

Considérant que vous serez en train de lire un fichier différent de celui que vous devrez écrire à, vous allez avoir plusieurs fichiers ouverts. Si ce sont toujours les mêmes fichiers, il suffit de faire deux open s. Par exemple, les suivants que des copies chaque ligne à l'autre fichier:

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) 

Si vous avez besoin pour rendre le fichier de sortie dépend de ce qui est dans chaque ligne du fichier d'entrée, vous pouvez d'abord ouvrir tous les fichiers de sortie possibles , puis passez en boucle dans le fichier d'entrée, en écrivant à n'importe quel fichier dont vous avez besoin, ou vous ne pouvez ouvrir chaque fichier de sortie que si nécessaire. cela fera

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) 

(Notez que j'ouvrir le fichier de sortie en a mode ppend, pour vous assurer qu'il est pas continuellement sur-écrit Notez également que, si le fichier d'entrée est grande, a: Par exemple. beaucoup de fichiers d'ouverture et de fermeture, qui peuvent être lents.)

+0

1) Comment puis-je sélectionner une partie spécifique du fichier? 2) Le nom Ouputfile doit être le même avec son sous-dossier. Dans votre code, ce n'est pas le cas. – erhan

+0

1) Vous ne pouvez sélectionner qu'une partie du fichier en mettant une condition avant l'appel 'write'. 2) C'est trivial à corriger: j'ai fait le chemin du fichier de sortie le résultat d'un appel de fonction. Vous êtes libre d'avoir cette fonction retourner le nom de chemin que vous voulez. – acdr