2016-07-27 4 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を読むことができないのでしょうか?だから私は彼が私が私が書いたコードを書きたいと仮定# we could do these two on one line, how?:ゼッド・ショーの著書の中で彼は、私がコメントで

in_file = open(from_file, "r") 

を書いていた場所に

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

を書きました。

誰かが私を助けることができたらうれしいです。事前に感謝

+3

"私は、私が書いたコードを書くようにと思った。" - いいえ。あなたは、その「r」が意味することを誤解しているようです。 – user2357112

+2

ファイルを読み取りモードで開くことは、ファイルを読み取ることとは大きく異なります。これは、本を読んで意図を持って本を開いて(実際にそれを強調したり下線を引いたりすることとは対照的に)、実際に読むこととの違いです。 –

+2

FYI:http://sopython.com/wiki/LPTHW_Complaints – jonrsharpe

答えて

1

彼はこのようにしたいin_file = open(from_file).read() in_fileは開いているファイルへの参照です。 ファイルの内容を参照しないで保存する場合は、上記のようにすることができます。このfile

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

は、ファイルのあなたの内容を与えると、あなたのファイルの内容にシンボルの数を取得します後、あなたは、この len(file)のようにコンテンツの長さを取得するにはfile変数を使用することができます

私は願っていますそれはあなたのために理にかなっていた。

NOTE

これは悪い習慣です、あなたはあなたのファイルの参照を保持し、参照して、あなたの行動を行う必要があります。

+0

"このようにするには、' in_file = open(from_file).read() '" - しかし**そうしないでください。ファイルへの参照を破棄し、参照カウントメカニズムを使用してファイルを閉じているためです。これは、あなたのコードがrefcountされていないPythonの実装で実行された場合、書き込みが遅れたり、失われる可能性がある書き込みに対して特に危険です。 – user2357112

+0

私は同意しますが、仕事のためにはOKです –

+0

あなたの答えに*実際のテキスト*を投稿し、 '{}'ボタンやCtrl-Kを使ってコードとして書式を設定する習慣を採用してください。写真はアクセス不可、コピー可能、または特に再利用可能ではありません。 – jonrsharpe

関連する問題