Как проверить количество символов файла в Python - PullRequest
6 голосов
/ 06 января 2010

У меня есть код Python, который читает много файлов. но некоторые файлы очень большие, из-за которых у меня возникают ошибки в других кодах. Я хочу, чтобы я мог проверить количество символов в файлах, чтобы избежать чтения этих чрезвычайно больших файлов. Спасибо.

Ответы [ 5 ]

7 голосов
/ 06 января 2010

Если вы хотите, чтобы юникод символ считал для текстового файла с заданной кодировкой, вам придется прочитать весь файл, чтобы сделать это.

Однако, если вы хотите, чтобы байт считал для данного файла, вам нужно os.path.getsize(), что должно сделать только stat для файла, если ваша ОС имеет stat() или эквивалентный вызов (все Unix и Windows).

7 голосов
/ 06 января 2010
os.stat(filepath).st_size

Предполагая, что под "символами" вы подразумеваете байты. ETA:

Мне нужно общее количество символов, так же как и то, что команда 'wc filename' дает мне unix

В каком режиме? wc само по себе даст вам количество строк, слов и байтов (такое же, как stat), а не символы Юникода.

Там - это переключатель -m, который будет использовать текущую кодировку локали для преобразования байтов в Unicode, а затем подсчитывать кодовые точки: это действительно то, что вы хотите? Нет смысла декодировать в Unicode, если вам нужны только слишком длинные файлы. Если вы действительно должны:

import sys, codecs

def getUnicodeFileLength(filepath, charset= None):
    if charset is None:
        charset= sys.getfilesystemencoding()
    readerclass= codecs.getReader(charset)
    reader= readerclass(open(filepath, 'rb'), 'replace')
    nchar= 0
    while True:
        chars= reader.read(1024*32)  # arbitrary chunk size
        if chars=='':
            break
        nchar+= len(chars)
    reader.close()
    return nchar

sys.getfilesystemencoding() получает кодировку локали, воспроизводящую то, что делает wc -m. Если вы знаете кодировку самостоятельно (например, 'utf-8'), тогда передайте это вместо.

Не думаю, что вы хотите это сделать.

5 голосов
/ 06 января 2010

Попробуйте

import os
os.path.getsize(filePath)

чтобы получить размер вашего файла в байтах.

4 голосов
/ 06 января 2010
os.path.getsize(path) 

Возвращает размер пути в байтах. Поднимите os.error, если файл не существует или недоступен.

2 голосов
/ 06 января 2010

альтернативный способ

f=open("file")
os.fstat( f.fileno() ).st_size
f.close()
...