2011-10-10 3 views
4

J'essaie de résoudre les questions de crédits supplémentaires de l'exercice 15 de Apprendre Python de Zed Shaw à la dure mais j'ai rencontré un problème. Le code est le suivant:Apprenez Python à la dure, exercice 15

from sys import argv 

script, filename = argv 

txt = open(filename) 

print "Here's your file %r:" % filename 
print txt.read() 
print "I'll also ask you to type it again:" 
file_again = raw_input("> ") 

txt_again = open(file_again) 
print txt_again.read() 

print txt_again.read() 

Je comprends tout le code qui a été utilisé, mais la question de crédit supplémentaire 7 demande:

Startup python again and use open from the prompt. Notice how you can open files and run read on them right there?

J'ai essayé entrer tout ce que je pouvais penser dans le terminal (sur un mac) après avoir démarré python avec la commande 'python', mais je n'arrive pas à exécuter le code. Que dois-je faire pour que cette partie du code s'exécute à partir de l'invite?

+2

Qu'est-ce que "tout ce que je peux penser"? Quelles erreurs obtenez-vous? –

+0

Je viens de commencer avec 'open (xyz.txt)' ou 'xyz.txt.read()' et j'obtiendrais _Traceback (dernier appel en dernier): Fichier "", ligne 1, en NameError: name 'ex15_sample' n'est pas défini_. Ou je commencerais par 'from sys import argv' pour importer le module argv comme je le ferais dans le script. Comme je suis un débutant, je ne comprends toujours pas comment le code courant de l'invite diffère de l'exécuter à partir d'un script. –

+0

Je fais cet exemple maintenant, mais quand il lit mon fichier texte, je n'ai que la dernière ligne. Aucune suggestion?Merci – Drewdin

Répondre

4

Zed ne dit pas exécuter ce morceau particulier de code de Python. Évidemment, ce code obtient la valeur filename à partir des paramètres que vous avez utilisés pour appeler le script, et si vous lancez simplement le shell Python, vous n'avez utilisé aucun paramètre.

Si vous avez fait:

filename = 'myfilename.txt' 
txt = open(filename) 

il travaillerait alors.

+0

Je comprends maintenant, merci. –

1

En fait, comme dans cette transcription (je l'ai ajouté des lignes vides pour une meilleure lisibilité):

pax:~$ python 
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 

>>> xyz = open ("minimal_main.c") 

>>> print xyz.read() 
int main (void) { 
    return 0; 
} 

>>> xyz.close() 

>>> <CTRL-D> 

pax:~$ _ 

Tout ce qu'il est de vous montrer est que vous n'avez pas besoin un script afin d'exécuter Python commandes, l'interface de ligne de commande peut être utilisée de la même manière.

+0

Merci. Je n'ai pas réalisé que je devrais simplement ignorer l'importation du module argv lors de l'exécution de l'invite. –

2

I just started with open(xyz.txt)

Eh bien, oui, bien sûr qui ne va pas travailler, parce que vous ne disposez pas d'un xyz variable et même si vous l'avez fait, il ne serait pas un attribut txt. Comme c'est un nom de fichier, vous voulez un string "xyz.txt", que vous créez en le plaçant entre guillemets: 'xyz.txt'. Notez que Python traite les guillemets simples et doubles plus ou moins les mêmes; Contrairement aux langages comme C++ et Java, il n'y a pas de type de données séparé pour les caractères individuels - ce sont juste des caractères de longueur 1.

-1

Après avoir exécuté Python dans le terminal,

abc = open ("ex15_sample.txt") 
print abc.read() 

Cela devrait faire.

0

print open('ex15_sample.txt').read()

Après python en cours d'exécution dans le terminal, nous allons utiliser open('filename.txt') pour ouvrir le fichier et à l'aide de l'opérateur point on peut appliquer la fonction read() directement sur elle.

+1

ce sera une meilleure réponse si vous décrivez votre code là-bas! – Deep

+0

@Deep J'ai essentiellement clubbed ouverture et lecture du fichier ensemble. Après l'exécution de python dans le terminal, nous utiliserons 'open ('filename.txt')' pour ouvrir le fichier et en utilisant l'opérateur point, nous pouvons appliquer la fonction 'read()' directement dessus. Si vous voulez vous pouvez faire les deux séparément comme cela est mentionné dans d'autres réponses. –

+0

@AS Veuillez [modifier votre réponse] (http://stackoverflow.com/posts/42901144/edit) et inclure cette information. –

Questions connexes