2011-10-10 95 views
4

我想解决练习15的额外信用问题Zed Shaw的学习Python困难的方式,但我遇到了一个问题。代码如下:学习Python困难的方法,练习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() 

据我所知,已经使用的所有代码,但额外的信用问题7:

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

我试着输入了所有我能在终端想到的(在Mac上)首次启动python与'python'命令后,但我不能让代码运行。我该怎么做才能让这段代码从提示符运行?

+2

什么是“我能想到的一切”?你得到什么错误? –

+0

我刚开始用'open(xyz.txt)'或'xyz.txt.read()',我会得到_Traceback(最近调用最后一次): 文件“”,第1行,在 NameError:name 'ex15_sample'没有被定义。或者我会从'从sys导入argv'开始导入argv模块,就像我在脚本中那样。由于我是初学者,我仍然不太了解如何从提示符运行代码与从脚本运行代码不同。 –

+0

我现在正在做这个例子,但是当它读取我的文本文件时,我只能得到最后一行。有什么建议么?谢谢 – Drewdin

回答

4

Zed并没有说要运行这个 Python中的特定代码片段。很显然,该代码从您用来调用脚本的参数中获取值filename,并且如果您刚刚启动Python shell,则没有使用任何参数。

如果你做的事:

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

然后它会工作。

+0

我现在明白了,谢谢。 –

1

基本上,就像在这份成绩单(我已经添加空行来提高可读性):

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:~$ _ 

所有它显示你的是,你不需要一个脚本,以运行Python命令,命令行界面可以以相同的方式使用。

+0

谢谢。我没有意识到,我应该从提示符运行时跳过导入argv模块。 –

2

I just started with open(xyz.txt)

嗯,是的,当然这是行不通的,因为你没有一个变量xyz,即使你没有做的,它不会有一个属性txt。由于它是一个文件名,所以您需要一个字符串“xyz.txt”,您通过将它放在引号中创建:'xyz.txt'。注意Python对待单引号和双引号差不多;与C++和Java等语言不同,单个字符没有单独的数据类型 - 它们只是长度为1的字符串。

-1

在终端上运行的Python后,

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

这应该做的。

0

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

在终端运行蟒蛇后,我们将使用open('filename.txt')打开该文件,并使用点运算符,我们可以直接套用read()功能就可以了。

+1

如果你在那里描述你的代码,这将是一个更好的答案! – Deep

+0

@Deep我基本上一起打开和阅读文件。在终端中运行python之后,我们将使用'open('filename.txt')'打开文件并使用点运算符,我们可以直接在它上面应用'read()'函数。如果你愿意,你可以按照其他答案中提到的那样单独执行两个操作。 –

+0

@AS请[编辑您的答案](http://stackoverflow.com/posts/42901144/edit)并包含此信息。 –