2012-06-04 2 views
1

J'essaie d'ouvrir un certain nombre de fichiers en utilisant glob et les nourrir à travers une série de fonctions. Certains de mes fichiers sont en gzip, d'autres sont en bz2 et d'autres en texte brut. J'ai typiquement utilisé le fichier fileinput mais je n'arrive pas à comprendre la syntaxe pour qu'il prenne en charge les fichiers compressés. Sur la base de ce Python Fileinput Doc il devrait être quelque chose comme:Python Fileinput openhook = fileinput.hook_compressed utiliser la syntaxe

openhook=fileinput.hook_compressed 

Mon code ressemble:

import fileinput 
import glob 

filestobeanalyzed = glob.glob('./files/*') 

for fileName in filestobeanalyzed: 
    inputfilename = fileName 
    for line in fileinput.input([inputfilename, openhook=fileinput.hook_compressed]): 
     #do stuff 

je reçois une syntaxe non valide sur la ligne de fileinput au signe =.

Des suggestions?

Répondre

2

Vous voulez

for line in fileinput.input(inputfilename, openhook=fileinput.hook_compressed): 
    #do stuff 

(j'ai enlevé les crochets). Vous essayiez de faire une affectation dans un constructeur de liste. par exemple.

my_list=["foo",bar="baz"] #this doesn't work (SyntaxError) 

Vous avez sans doute eu l'idée de la documentation python qui utilise [ et ] pour indiquer les arguments facultatifs se rapportant à des fonctions.

Ceci est juste une mise de côté - souvent, il y a plus d'informations dans la traceback qui peuvent aider à identifier le problème que juste le type d'erreur et le numéro de ligne. (lire: Lorsque vous avez un retraçage, il est généralement apprécié si vous collez le tout afin que nous puissions le voir)

+0

en fait c'était tout le retraçage, juste "erreur de syntaxe sur =" et une flèche pointant vers l'emplacement. Merci quand même et j'ai eu l'idée de la documentation de Python. Votre solution a bien fonctionné, merci encore. – secumind

+0

@secumind - Je suis content que ça a marché pour vous. :) – mgilson