2010-12-15 85 views
0

我試圖打開一個txt文件並閱讀它,但我得到一個類型錯誤,我不確定爲什麼。如果你可以請提供一個推理和正確的語法,我試圖更好地掌握下面發生的事情。下面的代碼,這是很簡單的,我認爲:Python類型錯誤(可能很簡單)

from sys import argv 

script = argv 
filename = argv 

txt = open(filename) 

print "Here's your file %r" %filename 
print txt.read() 

是歡迎您

回答

4

argv是一個列表,而不是一個字符串。你想

script = argv[0] 
filename = argv[1] 

考慮使用argparse,而不是直接交給sys.argv

>>> import argparse 
>>> parser = argparse.ArgumentParser(description="Print a file.") 
>>> parser.add_argument("path", type=str, nargs=1, help="Path to the file to be printed.") 
_StoreAction(option_strings=[], dest='path', nargs=1, const=None, default=None, type=<type 'str'>, choices=None, help='Path to the file to be printed.', metavar=None) 
>>> args = parser.parse_args() 
>>> print args 
Namespace(path=[<...>]) 

它看起來要複雜得多,但它會使你的命令行工具更靈活,更容易擴展,它將確保您在命令行上獲得正確的文檔。

2

首先,argv是一個參數列表。打開不會列出。這就是爲什麼你會遇到類型錯誤。

其次,開放式(應該)採取2個參數,文件名和模式(是的模式是可選的,但把它存在的習慣得到的。與

import sys 

script = sys.argv[0] 
filename = sys.argv[1] 

txt = open(filename, 'r') 

print "Here's your file %r" %filename 
print txt.read() 
+0

爲什麼要在把一個模式的習慣嗎?默認參數的一點是,它並不總是必要的。 – katrielalex 2010-12-15 21:18:52

+0

因爲我不得不尋找如果模式是可選的,那麼默認情況下價值是。這意味着閱讀此代碼的任何人都必須這樣做。哪個不好。 – Falmarri 2010-12-15 21:21:04

+0

還添加二進制或文本模式標誌。它在Windows上有所不同。而在Python中,它*總是*有所作爲,因此放入其中。 – 2010-12-15 21:24:44

0

argv的更換將是一個列表,而文件名應該是一個字符串。

你或許應該使用filename = argv[1]