2012-01-19 3 views
1

Я пытаюсь получить количество символов в файле. Но когда я использую 'len' в импортированном txt-файле, он возвращает количество бит вместо количества символов.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 символы больше не будут содержать 1-байтовые символы, как в ASCII.

+0

Нет, он подсчитывает количество байтов, как вы сказали в первом предложении: Предположим, вы читаете файл, закодированный с использованием UTF-8, и его содержимое: 'äöüß \ n', len (f.read()) вернется '9'. – Gandaro

+0

Я просто редактировал свой ответ! но хороший улов! – aayoubi

Смежные вопросы