Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 9, 2017 21:07:41

Bjiq
Зарегистрирован: 2017-11-09
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

пока так сделал, но я думаю можно улучшить код, если учесть, что иногда файл может весит больше 5 Мб (600 000 строк)

     def search_last_line(self):
        last_line = None
        for num, line in enumerate(self.open_file_to_read(), 0):
            last_line = num
        return last_line

Офлайн

#2 Ноя. 10, 2017 03:00:14

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

при всем уважениии, быстрее, чем “дернуть субпроцессом ‘wc’ за ‘-l’” вы вряд ли напишете

Офлайн

#3 Ноя. 10, 2017 14:26:01

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

вот тут люди задаются тем же вопросом
https://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python
я там насчитал с десяток способов берешь пару тройку файлов разного размера, от пары килобайт до сотни МБ и проганяешь все способы измеряя время таймит-ом.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Ноя. 10, 2017 14:26:18)

Офлайн

#4 Ноя. 11, 2017 07:51:17

damilkrose
Зарегистрирован: 2017-11-10
Сообщения: 18
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

Если нужна скорость - юзай многопотоковое программирование - юзай threading. По крайней мере производительность и скорость моей программы(не скажу какой) увеличилась в x2.5 раз при том, что прога работала в 2-ух потоках, а не в 1-ом(мэйновском потоке).

Офлайн

#5 Ноя. 11, 2017 22:46:25

Bjiq
Зарегистрирован: 2017-11-09
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

Спасибо большое всем

Офлайн

#6 Ноя. 11, 2017 22:55:20

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

damilkrose
ну и как вам блин ваш совет поможет автору? КАК ?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Ноя. 12, 2017 17:37:25

damilkrose
Зарегистрирован: 2017-11-10
Сообщения: 18
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

JOHN_16
КАК ?
Под советом “используй threading” я имел в виду, bjiq, что ты можешь сделать свою прогу работающей в нескольких потоках. Подробнее: https://habrahabr.ru/post/149420/
Надо просто содержимое файла по возможности разделить на 2 части для 2-ух потоков.

А твой вариант совсем не плох.

Отредактировано damilkrose (Ноя. 12, 2017 17:38:00)

Офлайн

#8 Ноя. 12, 2017 17:45:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

damilkrose
Объясни на пальцах. Вот есть у нас файл, надо узнать количество строк. Вопрос № 1: как не зная размер файла разбить его на две части? Вопрос № 2: что конкретно должен делать поток № 1 с частью файла № 1.



Офлайн

#9 Ноя. 12, 2017 19:17:28

damilkrose
Зарегистрирован: 2017-11-10
Сообщения: 18
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

FishHook
Объясни на пальцах. Вот есть у нас файл, надо узнать количество строк. Вопрос № 1: как не зная размер файла разбить его на две части?
Размер узнать не так сложно:
 import os
size_of_file = os.path.getsize(путь_к_файлу) # размер файла в байтах.
С текстом проще все делается. если он говорит надо узнать кол. строк - значит, он имеет в виду текст.
 with open("name.txt", "r") as file:
    lines = len(file.read().split())
if not lines % 2:
    part1 = lines[:(lines/2)
    part2 = lines[(lines/2):]
else:
    part1 = lines[:(lines/2+0.5)] # даем 1-ой части на 1 строку больше
    part2 = lines[(lines/2-0.5):] # А второй - меньше
# part1 - это первая половина текста в файле
# part2 - это вторая половина

FishHook
Вопрос № 2: что конкретно должен делать поток № 1 с частью файла № 1
Сделать тоже, что и автор вопроса, только не со всем файлом:
Bjiq
self.open_file_to_read()
А по частям для каждого потока. Так дело пойдет гораздо быстрее. И размер тут не имеет особого значения если в деле говориться о строках

P. S. Написал что думаю. Если не прав в чем-то - пожалуйста докажи, и я извинюсь.


Отредактировано damilkrose (Ноя. 12, 2017 19:19:05)

Офлайн

#10 Ноя. 12, 2017 21:20:22

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как узнать номер последней строки файла?

damilkrose
  
with open("name.txt", "r") as file:
    lines = len(file.read().split())
Я конечно дико извиняюсь, но какой смысл во всем остальном коде после этих строк, с учетом постановки задачи тописктартером?
Плюс чтение всего файл в память не добавит быстродействия при достаточно большом файле.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Ноя. 12, 2017 21:22:04)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version