Чтение файлов в Python - PullRequest
       10

Чтение файлов в Python

1 голос
/ 04 августа 2009

Попытка понять, как вы должны читать файлы в Python. Это то, что я сделал, и это не работает должным образом:

import os.path

filename = "A 180 mb large file.data"
size = os.path.getsize(filename)

f = open(filename, "r")
contents = f.read()
f.close()

print "The real filesize is", size
print "The read filesize is", len(contents)

f = open(filename, "r")

size = 0

while True:
    contents = f.read(4)
    if not contents: break
    size += len(contents)

f.close()

print "this time it's", size

Выходы:

The real filesize is 183574528
The read filesize is 10322
this time it's 13440

Кто-нибудь знает, что здесь происходит? :)

Ответы [ 3 ]

5 голосов
/ 04 августа 2009

Если ваш файл смущает библиотеки C, тогда ваши результаты ожидаются.

ОС считает, что это 180Mb.

Однако вокруг разбросаны нулевые байты, что может сбить с толку библиотеки C stdio.

Попробуйте открыть файл с помощью "rb" и посмотреть, если вы получите другие результаты.

3 голосов
/ 04 августа 2009

Первый - это размер файла в байтах, в другой раз вы читаете файл как текст и считаете символов . Измените все open(filename, "r") на open(filename, "rb") и все работает.

0 голосов
/ 04 августа 2009

Речь идет не о строках: Python полностью удовлетворен нулевыми байтами в строках.

Это потому, что вы работаете в Windows и открываете файл в текстовом режиме, поэтому он преобразует все "\ n" в "\ r \ n", уничтожая все ваши двоичные данные.

Откройте ваш файл в двоичном режиме с режимом "rb"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...