2012-01-19 73 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()) 

結果4當內容是def\n。也許你的文本是用UTF-16/32/...編碼的,它使用多個字節作爲一個字符?請詳細說明你的問題。

0

其實這是bytes閱讀的數量。如果你在linux上:ls -lh text1.txt應該給你1227K

該數字包含文件中的字符數,但行結尾也被計算在內。

PS我的答案沒有考慮到文件編碼。在UTF-8下,字符將不再是像ASCII一樣的單個單字節字符。

+0

不,它計算字節數,正如你在第一句中所說的:假設你正在讀取一個使用UTF-8編碼的文件,它的內容是:'äöüß\ n',len(f.read())將返回'9'。 – Gandaro

+0

我只是編輯我的答案!但好抓! – aayoubi

相關問題