2011-10-10 89 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)幷包含此信息。 –