2011-02-16 15 views
10

Tengo un directorio de archivos de texto que tienen la extensión .txt. Mi objetivo es imprimir el contenido del archivo de texto. Deseo poder usar el comodín *.txt para especificar el nombre de archivo que deseo abrir (estoy pensando en algo como F:\text\*.txt?), Dividir las líneas del archivo de texto, luego imprimir el resultado.Abrir archivo por nombre de archivo comodín

Aquí hay un ejemplo de lo que quiero hacer, pero quiero poder cambiar somefile al ejecutar mi comando.

f = open('F:\text\somefile.txt', 'r') 
for line in f: 
    print line, 

que había descargado el módulo glob antes, pero no pude averiguar cómo realmente hacer nada a los archivos. Esto es lo que se me ocurrió, no funcionaba.

filepath = "F:\irc\as\*.txt" 
txt = glob.glob(filepath) 

lines = string.split(txt, '\n') #AttributeError: 'list' object has no attribute 'split' 
print lines 

Respuesta

4

Usted puede utilizar el módulo glob para obtener una lista de archivos de comodines:

File Wildcards

A continuación, sólo hacer un bucle durante más de esta lista y ya está:

filepath = "F:\irc\as\*.txt" 
txt = glob.glob(filepath) 
for textfile in txt: 
    f = open(textfile, 'r') #Maybe you need a os.joinpath here, see Uku Loskit's answer, I don't have a python interpreter at hand 
    for line in f: 
    print line, 
+0

Ver mi edición por favor. – greg

+0

Como ya he dicho, debe recorrer la lista que sale de glob.glob: 'filepath =" F: \ irc \ as \ *. Txt " txt = glob.glob (filepath) para el archivo de texto en txt: f = abrir (archivo de texto, 'r') para la línea en f: línea de impresión, ' –

+0

os.path.join no es necesario porque glob.glob proporciona una ruta completa. También considere usar la expresión con, en su solución, el identificador del archivo no está cerrado. con lo hace automáticamente :) –

2

salida "glob - Unix ruta estilo expansión de los patrones"

http://docs.python.org/library/glob.html

+0

Ver mi edición plz. – greg

+0

@greg ¿Por qué intentas string.split() en el resultado de glob.glob? glob.glob devuelve una lista de nombres de archivos coincidentes. Simplemente recorra la lista. Aún necesita abrir cada archivo y leerlo. – dkamins

16
import os 
import re 
path = "/home/mypath" 
for filename in os.listdir(path): 
    if re.match("text\d+.txt", filename): 
     with open(os.path.join(path, filename), 'r') as f: 
      for line in f: 
       print line, 

Aunque ignoraste mi solución perfectamente bien, aquí van:

import glob 
path = "/home/mydir/*.txt" 
for filename in glob.glob(path): 
    with open(filename, 'r') as f: 
     for line in f: 
      print line, 
+2

En el segundo fragmento de código debe ser: con abrir (archivo, 'r') como f: (también es un nitpick mejor usar un nombre de variable diferente que 'archivo') – sateesh

0

Este problema sólo vino para mí y yo era capaz de solucionar con Python puro:

El enlace a los documentos de python se encuentra aquí: 10.8. fnmatch — Unix filename pattern matching

Cita: "Este ejemplo imprimirá todos los nombres de archivos en el directorio actual con t extensión .txt: "

import fnmatch 
import os 

for file in os.listdir('.'): 
    if fnmatch.fnmatch(file, '*.txt'): 
     print file 
+0

El '.' en os.listdir significa 'directorio actual'. Es bueno saber si necesita especificar un directorio en otro lugar. – rAntonioH

Cuestiones relacionadas