2012-01-19 5 views
1

ファイル内の文字数を取得しようとしています。 しかし、インポートされたtxtファイルに 'len'を使用すると、文字数ではなくビット数が返されます。Python:テキストファイルの文字数

text1=open('text1.txt','r+').read() 
print len(text1) 

1256664 

どうすればこの問題を解決できますか?

+1

は私たちに、ファイルの内容を表示します。それは私にとってうまくいっているからです。 – RanRag

+1

私は 'hello world \ n'という名前の単純なテストファイルでこれを試してみましたが、文字数はちょうど良い(12を返します)。それを試して、それが動作するかどうかを確認できますか? 'text1'を表示して実際に文字列かどうか調べてみましょう。バイナリモードで読んでいるかもしれません。 – fsong

+0

@fsong文字列として返されないテキストを印刷するときは、インデントとタブなどで印刷します。ファイル情報を見ると、サイズは1,256,664バイトです。 – Julia

答えて

3

問題は、あなたが文字をカウントする前に、それをデコードする必要があり、UTF-8で言う、あなたのファイルがエンコードされていることである場合:

utf8_text=open('text1.txt','r+').read() 
unicode_data = utf8_text.decode('utf8') 

print len(unicode_data) 
1

これはではありません。ビット数を返します。

with open('abc') as f: 
    print len(f.read()) 

結果がdef\nである場合、4になります。たぶんあなたのテキストはUTF-16/32/...のようなものでエンコードされていますが、これは1文字に複数のバイトを使用していますか?あなたの問題を詳述してください。

0

実際にはbytesの番号です。場合は、Linux上で:ls -lh text1.txt1227Kを与える必要があります。

この数字にはファイル内の文字数が含まれますが、行末もカウントされます。

PS私の答えはファイルエンコーディングを考慮していません。 UTF-8では、文字はASCIIのような単一の1バイト文字ではなくなりました。

+0

いいえ、あなたの最初の文章で言ったように、バイト数を数えます:あなたがUTF-8を使ってエンコードされたファイルを読み込んでいて、その内容が 'äöüß\ n'、len(f.read() 「9」。 – Gandaro

+0

私はちょうど私の答えを編集していた!しかし、良いキャッチ! – aayoubi