【问题标题】:TypeError: object of type 'file' has no len()TypeError:“文件”类型的对象没有 len()
【发布时间】:2016-07-29 18:52:53
【问题描述】:

您好,我是编程初学者。我正在阅读 Zed Shaw 的书 Learn Python the Hard Way,遇到了一个我觉得奇怪的错误。我想知道为什么它一直给我错误:TypeError:我在 Windows Powershell 中运行我的代码后,'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 呢?他在 Zed Shaw 的书中写道

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

在我写的地方

in_file = open(from_file, "r")

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

如果有人可以帮助我,将不胜感激。提前致谢

【问题讨论】:

  • “所以我以为他想让我写我写的代码。” - 不。您似乎误解了 "r" 的含义。
  • 以读取模式打开文件与读取文件有很大不同。这是为了阅读而打开一本书(而不是突出显示或下划线)与实际阅读之间的区别。

标签: python-2.7 error-handling


【解决方案1】:

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

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

在此之后file 将为您提供文件内容,您可以使用file 变量来获取这样的内容长度 len(file),您将获得文件内容中的符号数量

我希望这对你有意义。

注意

这是一种不好的做法,您需要保留您的文件参考并根据参考执行您的操作。

【讨论】:

  • “他希望你这样做in_file = open(from_file).read()” - 但不要那样做,因为你放弃了对文件的引用并依赖引用计数机制为您关闭它。这对于写入尤其危险,如果您的代码曾经在非引用 Python 实现上运行,您的写入可能会延迟甚至丢失。
  • 我同意,但任务没问题
  • 请养成将实际文本发布到您的答案中的习惯,并使用{}按钮或Ctrl-K将其格式化为代码。图片不可访问、不可复制或特别不可重复使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2019-05-23
  • 2013-04-18
  • 2015-01-21
  • 2021-12-19
  • 2018-08-26
  • 1970-01-01
相关资源
最近更新 更多