2017-05-04 1 views
-1

J'essaie de créer un programme qui lit le chemin donné par l'utilisateur, puis lit les deux premières lignes de fichiers txt qui existent à ce chemin spécifique.Python - Lecture des deux premières lignes à partir de fichiers txt

Le problème est que je me donne cette erreur:

"TypeError: Unicode à contraindre: Chaîne de besoin ou d'un tampon, builtin_function_or_metho d trouvé"

Je ne comprends pas pourquoi?

#!/usr/bin/python 

import glob, os 
import sys 

#Check to see that path was privided 
if len(sys.argv) < 2: 
    print "Please provide a path" 

#Find files in path given 
os.chdir(dir) 
#Chose the ones with txt extension 
for file in glob.glob("*.txt"): 
    try: 
     #Read and output first two lines of txt file 
     f = open(file) 
     lines = f.readlines() 
     print lines[1] 
     print lines[2] 
     fh.close() 

     #Catch exception errors 
    except IOError: 
     print "Failed to read " + file 
+0

Pour commencer, vous imprimez la ligne 2 et 3 S'il vous plaît donner le message d'erreur complet, y compris traceback – timgeb

+0

'os.chdir (dir)' Que pensez-vous 'dir' représente dans cette ligne? – DeepSpace

+0

semble' f.close', Non? – itzMEonTV

Répondre

1

Vous semblez être méprendre sur le haut-dir signifie un nom de répertoire; non ce n'est pas.

Vous devriez passer un chemin d'accès à os.chdir et non dir:

os.chdir('/some/directory/path') 

BTW, vous n'avez pas besoin de lire le fichier en mémoire pour obtenir vos deux lignes, vous pouvez simplement appeler next sur l'objet fichier:

with open(file) as f: 
    line1, line2 = next(f), next(f) 
+0

Ok, merci Mais le chemin du répertoire est envoyé en argument, il n'est pas codé en dur Je lance python sur ma ligne de commande sous Linux – LinuxN00b

+0

Passé en argument à partir de la ligne de commande? 'os.chd ir (sys.argv [1]) ' –

0

de plus, s'il n'y a pas de chemin dans l'entrée, vous devez quitter après l'impression du message d'erreur, sinon vous obtiendrez un IndexError

os.chdir(sys.argv[1]) 

Et si le fichier n'a qu'une seule ligne, la deuxième next(f) donnera une exception StopIteration, qui devrait être soit attrapée, ou vous pouvez utiliser next(f, "") pour la deuxième ligne, ce sera par défaut une chaîne vide dans le cas où le la fin du fichier est atteinte.

0

EDIT: J'entrais dans le mauvais chemin. :(

Ok, donc je l'ai modifié le code maintenant et je reçois pas d'erreur. Le problème est maintenant que si je cours avec python readfiles.py /home/ rien ne se passe?

#!/usr/bin/python 

import glob, os 
import sys 

#Check to see that path was privided 
if len(sys.argv) < 2: 
    print "Please provide a path" 
    sys.exit() 

#Find files in path given 

os.chdir(sys.argv[1]) 

#Chose the ones with txt extension 

for file in glob.glob("*.txt"): 
    try: 

#Read and output first two lines of txt file 
     with open(file) as f: 
     line1, line2 = next(f), next(f, "") 
     print line1 + " " + line2 

    #Catch exception errors 
except IOError: 
     print "Failed to read " + file