Уведомления

Группа в Telegram: @pythonsu

#1 Май 13, 2010 16:57:35

ex
От:
Зарегистрирован: 2009-09-28
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами

Доброго времени суток,
то ли я гуглом разучился пользоваться, то ли питон действительно не умеет говорить сколько строк в файле, да и начать чтение файла с определенной строки тоже не может.

Мне по задаче нужно взять файлик прочитать его с определенной строки, столько строк сколько попросят, однако понял что читать файлик придется весь, пока не найдется нужная строка.. Все бы ничего если бы не размер файлов от 1 Гб. Чем такое можно решить в питоне?



Офлайн

#2 Май 13, 2010 17:06:25

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами

если я правильно понимаю эту жизнь, то конец строки это просто байтик с определенным кодом, чтобы посчитать количество строк нужно посчитать количество этих байтиков. Можете предварительно обработать все файлы, создав список номеров байтов с которых надо начинать читать новую строку, потом просто бегать до нужного места seek'ом или как он там в питоне называется (не знаю :) )

Хотя, я конечно могу безнадежно отставать от жизни, поэтому не стоит доверять моим словам :)



Офлайн

#3 Май 13, 2010 17:14:42

ex
От:
Зарегистрирован: 2009-09-28
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами

Zubchick
если я правильно понимаю эту жизнь, то конец строки это просто байтик с определенным кодом, чтобы посчитать количество строк нужно посчитать количество этих байтиков. Можете предварительно обработать все файлы, создав список номеров байтов с которых надо начинать читать новую строку, потом просто бегать до нужного места seek'ом или как он там в питоне называется (не знаю :) )

Хотя, я конечно могу безнадежно отставать от жизни, поэтому не стоит доверять моим словам :)
в текстовом файлике посчитать количество переводов коретки? это метров 150 в оперативочку на запоминание позиций для каждой строки.. что то мне нашептывает, что придется изобретать еще один велосипед :mad:



Офлайн

#4 Май 13, 2010 17:22:20

ex
От:
Зарегистрирован: 2009-09-28
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами

ex
Zubchick
если я правильно понимаю эту жизнь, то конец строки это просто байтик с определенным кодом, чтобы посчитать количество строк нужно посчитать количество этих байтиков. Можете предварительно обработать все файлы, создав список номеров байтов с которых надо начинать читать новую строку, потом просто бегать до нужного места seek'ом или как он там в питоне называется (не знаю :) )

Хотя, я конечно могу безнадежно отставать от жизни, поэтому не стоит доверять моим словам :)
в текстовом файлике посчитать количество переводов коретки? это метров 150 в оперативочку на запоминание позиций для каждой строки.. что то мне нашептывает, что придется изобретать еще один велосипед :mad:
Темболее, что бы их посчитать опять же нужно читать весь файл, а в этом процессе то и вся загвоздка, долговато идет..



Офлайн

#5 Май 13, 2010 18:28:07

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами

ex
Темболее, что бы их посчитать опять же нужно читать весь файл, а в этом процессе то и вся загвоздка, долговато идет..
Ну это типа как индексирование. Один раз долго, зато потом быстро. Или файл ещё и менять планируется?



Офлайн

#6 Май 15, 2010 22:59:51

ex
От:
Зарегистрирован: 2009-09-28
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами

UsCr
ex
Темболее, что бы их посчитать опять же нужно читать весь файл, а в этом процессе то и вся загвоздка, долговато идет..
Ну это типа как индексирование. Один раз долго, зато потом быстро. Или файл ещё и менять планируется?
В этом то и трабл… файл меняеться ежесекундно и на много



Офлайн

#7 Май 16, 2010 00:41:43

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами

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

for i, line in enumerate(open("file.big")):
if i == 1000000:
print line
break
В любом случае, чтобы посчитать количество строк, нужно читать весь файл. Либо читать с определенной позиции с помощью метода .seek(), но тогда ты не узнаешь сколько строк было до указанной позиции.



Отредактировано (Май 16, 2010 00:44:41)

Офлайн

#8 Май 16, 2010 11:37:08

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Работа с файлами

Я так понимаю, блокировка файла не подходит изначально. Работайте с копией файла.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version