2008-10-16 28 views
7

Quiero escribir un programa para esto: En una carpeta tengo n número de archivos; primero lea un archivo y realice alguna operación, luego guarde el resultado en un archivo separado. Luego lea el segundo archivo, vuelva a realizar la operación y guarde el resultado en el segundo archivo nuevo. Haga el mismo procedimiento para n cantidad de archivos. El programa lee todos los archivos uno por uno y almacena los resultados de cada archivo por separado. Da ejemplos de cómo puedo hacerlo.¿Cómo leer y escribir varios archivos?

+0

tarea ?? revise la historia del cartel –

+0

Probablemente. Pero al mismo tiempo, solo estoy aprendiendo Python, parece un buen ejercicio recordarme a mí mismo que no estoy golpeando mi cabeza contra la pared. Si a él no le importa lo suficiente como para aprender cosas de este nivel, ¿quién soy yo para discutir? Al final del día, si no pasas el examen, aún fallaste. –

+0

Lo etiqueté como tarea; Preguntar y responder a las preguntas de la tarea están en la lista del sitio, sin embargo, para el beneficio del asesino, me gustaría que les solicitemos primero que proporcionen un código que no funciona hasta el momento. – tzot

Respuesta

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() 

Entonces llamar así:

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

imprima (n) para que sea compatible con python 3. Todavía funciona con 2.4 al menos, también. – Bernard

+0

Estoy ejecutando 2.3 de memoria, pero gracias por el aviso. –

+0

puede ser exagerado para un único argumento, pero recomendaría el módulo optparse para el análisis de línea de comandos. Se ocupa de tareas desagradables como manejar citas, etc. – monkut

5

Usted puede encontrar el módulo fileinput útil. Está diseñado para exactamente este problema.

7

Creo que lo que echa de menos es cómo recuperar todos los archivos en ese directorio. Para hacerlo, use el módulo glob. Este es un ejemplo que duplicar todos los archivos con extensión * .txt a archivos con extensión * .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 pequeño problema con este ejemplo. ¿Qué sucede si tengo un archivo llamado 'mytxtfile.txt'? –

0

respuesta Combinado directorio de la incorporación o la lista específica de nombres de archivos argumentos:

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

I' Acabo de enterarme del comando os.walk() recientemente, y puede ayudarte aquí. Le permite recorrer una estructura de árbol de directorios.

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)] 
Cuestiones relacionadas