Python читает файл с блоком, но заканчивается символом новой строки (\ n) - PullRequest
0 голосов
/ 09 февраля 2012

test.txt является разделенным текстовым файлом "\ n":

f = open ('test.txt', 'r') f.read (256)

Но при чтении 256 последние записи могут быть не с полной строкой.

Как читать, например:

Я установил чтение 256, но когда 248 является "\ n" и256 последние записи без полной строки просто читаются как 248, а f.tell () дает позицию 248.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 09 февраля 2012

Если вы используете новые строки для разделения ваших данных, почему бы не прочитать их таким же образом?

with open('test.txt', 'r') as f:
    lines = f.readlines()
# Now each line in lines is a complete line.
0 голосов
/ 09 февраля 2012

Простейший способ прочитать файл со строками переменной длины, разделенными любым из '\n', '\r' или '\r\n' или даже их комбинацией:

with open('yourfile.txt', 'rU') as f:
    for line in f:
        do_something_with(f)
        # optional, if you want to bale out after 256 bytes:
        if f.tell() >= 256: break

Что означает чтение больших блоков, поиск окончаний строк и получение строки за раз. Базовый код написан на C. До сих пор я не видел никаких доказательств того, что делать то же самое в коде Python будет быстрее.

0 голосов
/ 09 февраля 2012

Вы заботитесь об эффективности?

вот один из способов сделать это:

data=f.read(256)
data=data.splitlines(True)
if data[-1]!=data[-1].splitlines()[-1]:
    #must be newline at end of last line
    data="".join(data)
else:
    data="".join(data[:-1])

print data
0 голосов
/ 09 февраля 2012

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

size_so_far = 0
contents = []

for line in open('test.txt'):
      size_so_far += len(line)
      if size_so_far > 256:
         break
      contents.append(line)

contents = "".join(contents)
...