我正在学习python而且我遇到了麻烦。 这是我的剧本:
from sys import argv
script,filename = argv
txt = open(filename)
print txt.read()
这可行,但是当我删除脚本参数时,例如:
from sys import argv
filename = argv
txt = open(filename)
print txt.read()
它给出错误:
文件“ex3.py”,第4行,in txt = open(filename)TypeError:强制转换为Unicode:需要字符串或缓冲区,列表找到
答案 0 :(得分:4)
当您执行script, filename = argv
时,您将script
分配给argv
的第一个元素,将filename
分配给第二个元素。但是,当您执行filename = argv
时,您将filename
分配给整个事情。这意味着您将列表传递给open
,这是Python不喜欢的。
如果您不需要使用script
,则可以将其替换为单个下划线,如下所示:
_, filename = argv
正如@raymonad在下面的评论中所述,您也可以直接将filename
分配给第二个元素,如下所示:
filename = argv[1]
答案 1 :(得分:4)
import sys
print type(sys.argv) # <type 'list'>
实际上argv
是一个列表,您试图将列表传递给open
,它希望第一个参数是有效的字符串(文件名)。这就是它失败的原因。
如果您实际上不需要其他值,那么您只能提取第一个参数,例如
from sys import argv
txt = open(argv[1])
print txt.read()
另一个重要建议,如果您要处理文件,请使用with
这样的语句
from sys import argv
with open(argv[1]) as txt:
print txt.read()
这样您就不必担心明确关闭文件
了