2016-07-27 111 views
0

你好我是编程初学者。我正在阅读Zed Shaw的书“学习Python困难之路”,并且遇到了一个我发现很奇怪的错误。我想知道为什么它不断给我的错误:TypeError:在Windows Powershell中运行我的代码后,'file'类型的对象没有len()。我跑的代码:TypeError:'file'类型的对象没有len()

from sys import argv 
from os.path import exists 

script, from_file, to_file = argv 

print "Copying from %s to %s" % (from_file, to_file) 

in_file = open(from_file, "r") 

print "The input file is %d bytes long" % len(in_file) 

它说错误在最后一行。我不明白为什么会出现这个错误,因为如果我是对的,我在读模式下打开我的文件并将其保存在变量in_file中。那为什么它不能读取in_file的len?在肖捷思锐的书,他在我写

in_file = open(from_file, "r") 

与评论的地方写

in_file = open(from_file) 
indata = in_file.read() 

# we could do these two on one line, how?所以我认为他想让我写我写的代码。

如果有人能帮助我,我将不胜感激。在此先感谢

+3

“所以我想他要我写我写的代码。” - 不。你似乎误解了“r”的意思。 – user2357112

+2

在读取模式下打开文件与读取file_完全不同。这是打开一本书与意图阅读它(而不是强调或强调段落)并实际阅读它的区别。 –

+2

供参考:http://sopython.com/wiki/LPTHW_Complaints – jonrsharpe

回答

1

他希望你这样做in_file = open(from_file).read() in_file是引用到您打开的文件。 如果你想存储你的文件的内容而不是引用它,你可以像上面那样做。

file = open("/path/to/file.txt").read() 

file后,会给你的文件的内容,你可以使用file变量获得的内容长度这样 len(file),之后你会在你的文件的内容得到符号数

希望这对你是有道理的。

注意

这是不好的做法,你需要保持你的文件引用和参考做你的行动。

+0

“他希望你这样做'in_file = open(from_file).read()'” - 但**不要**这样做,因为你放弃了对文件的引用,并依靠引用计数机制来为你关闭它。这对于写入来说尤其危险,如果你的代码运行在一个没有引用的Python实现上,那么你的写入可能会延迟甚至丢失。 – user2357112

+0

我同意,但任务是好的 –

+0

请采纳在您的答案中发布*实际文本*并使用'{}'按钮或Ctrl-K将其格式化为代码的习惯。图片不可访问,可复制或特别可重复使用。 – jonrsharpe

相关问题