2008-10-16 11 views
7

Je veux écrire un programme pour cela: Dans un dossier, j'ai n nombre de fichiers; lire d'abord un fichier et effectuer une opération puis stocker le résultat dans un fichier séparé. Lisez ensuite le 2e fichier, recommencez l'opération et sauvegardez le résultat dans le nouveau 2e fichier. Suivez la même procédure pour n nombre de fichiers. Le programme lit tous les fichiers un par un et stocke les résultats de chaque fichier séparément. S'il vous plaît donnez des exemples de comment je peux le faire.Comment lire et écrire plusieurs fichiers?

+0

devoirs ?? vérifier l'historique de l'affiche –

+0

Probablement. Mais en même temps, j'apprends moi-même Python, ça me semble un bon exercice pour me rappeler que je ne me cogne pas la tête contre un mur. S'il ne se soucie pas assez d'apprendre ce niveau, alors qui suis-je pour discuter? À la fin de la journée, si vous échouez à un examen, vous avez toujours échoué. –

+0

Je l'ai marqué comme devoirs; demander et répondre à des questions de devoirs sont dans la liste du site, mais pour le bénéfice du demandeur, je voudrais que nous leur demandions d'abord de fournir un code qui ne fonctionne pas jusqu'à présent. – tzot

Répondre

11
import sys 

# argv is your commandline arguments, argv[0] is your program name, so skip it 
for n in sys.argv[1:]: 
    print(n) #print out the filename we are currently processing 
    input = open(n, "r") 
    output = open(n + ".out", "w") 
    # do some processing 
    input.close() 
    output.close() 

appeler Ensuite, comme:

 
./foo.py bar.txt baz.txt 
+0

print (n) pour le rendre compatible avec python 3. Fonctionne toujours avec 2.4 au moins, aussi bien. – Bernard

+0

Je cours de la mémoire 2.3, mais merci pour les heads-up. –

+0

il peut être exagéré pour un seul argument, mais je recommanderais le module d'optparse pour l'analyse de ligne de commande. Prend en charge des tâches horribles comme la gestion des devis, etc. – monkut

5

Vous pouvez trouver le module fileinput utile. Il est conçu pour exactement ce problème.

7

Je pense que ce qui vous manque, c'est comment récupérer tous les fichiers dans ce répertoire. Pour ce faire, utilisez le module glob. Voici un exemple qui dupliquer tous les fichiers avec l'extension * .txt aux fichiers avec l'extension * .out

import glob 

list_of_files = glob.glob('./*.txt')   # create the list of file 
for file_name in list_of_files: 
    FI = open(file_name, 'r') 
    FO = open(file_name.replace('txt', 'out'), 'w') 
    for line in FI: 
    FO.write(line) 

    FI.close() 
    FO.close() 
+0

Un petit problème avec cet exemple. Que se passe-t-il si j'ai un fichier appelé 'mytxtfile.txt'? –

0

réponse répertoire ou d'une liste spécifique incorporant des arguments de noms de fichiers combinés:

import sys 
import os.path 
import glob 

def processFile(filename): 
    fileHandle = open(filename, "r") 
    for line in fileHandle: 
     # do some processing 
     pass 
    fileHandle.close() 

def outputResults(filename): 
    output_filemask = "out" 
    fileHandle = open("%s.%s" % (filename, output_filemask), "w") 
    # do some processing 
    fileHandle.write('processed\n') 
    fileHandle.close() 

def processFiles(args): 
    input_filemask = "log" 
    directory = args[1] 
    if os.path.isdir(directory): 
     print "processing a directory" 
     list_of_files = glob.glob('%s/*.%s' % (directory, input_filemask)) 
    else: 
     print "processing a list of files" 
     list_of_files = sys.argv[1:] 

    for file_name in list_of_files: 
     print file_name 
     processFile(file_name) 
     outputResults(file_name) 

if __name__ == '__main__': 
    if (len(sys.argv) > 1): 
     processFiles(sys.argv) 
    else: 
     print 'usage message' 
1

Je Je viens d'apprendre la commande os.walk() récemment, et cela peut vous aider ici. Il vous permet de parcourir une arborescence de répertoires.

import os 
OUTPUT_DIR = 'C:\\RESULTS' 
for path, dirs, files in os.walk('.'): 
    for file in files: 
     read_f = open(os.join(path,file),'r') 
     write_f = open(os.path.join(OUTPUT_DIR,file)) 

     # Do stuff 
0
from pylab import * 
import csv 
import os 
import glob 
import re 
x=[] 
y=[] 

f=open("one.txt",'w') 

for infile in glob.glob(('*.csv')): 
    # print "" +infile 
    csv23=csv2rec(""+infile,'rb',delimiter=',') 
    for line in csv23:  
     x.append(line[1]) 
     # print len(x) 
    for i in range(3000,8000): 
     y.append(x[i]) 
    print ""+infile,"\t",mean(y) 
    print >>f,""+infile,"\t\t",mean(y) 
    del y[:len(y)] 
    del x[:len(x)] 
Questions connexes