Форум сайта python.su
пока так сделал, но я думаю можно улучшить код, если учесть, что иногда файл может весит больше 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
Офлайн
при всем уважениии, быстрее, чем “дернуть субпроцессом ‘wc’ за ‘-l’” вы вряд ли напишете
Офлайн
вот тут люди задаются тем же вопросом
https://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python
я там насчитал с десяток способов берешь пару тройку файлов разного размера, от пары килобайт до сотни МБ и проганяешь все способы измеряя время таймит-ом.
[code python][/code]
Отредактировано PEHDOM (Ноя. 10, 2017 14:26:18)
Офлайн
Если нужна скорость - юзай многопотоковое программирование - юзай threading. По крайней мере производительность и скорость моей программы(не скажу какой) увеличилась в x2.5 раз при том, что прога работала в 2-ух потоках, а не в 1-ом(мэйновском потоке).
Офлайн
Спасибо большое всем
Офлайн
damilkrose
ну и как вам блин ваш совет поможет автору? КАК ?
Офлайн
JOHN_16Под советом “используй threading” я имел в виду, bjiq, что ты можешь сделать свою прогу работающей в нескольких потоках. Подробнее: https://habrahabr.ru/post/149420/
КАК ?
Отредактировано damilkrose (Ноя. 12, 2017 17:38:00)
Офлайн
damilkrose
Объясни на пальцах. Вот есть у нас файл, надо узнать количество строк. Вопрос № 1: как не зная размер файла разбить его на две части? Вопрос № 2: что конкретно должен делать поток № 1 с частью файла № 1.
Офлайн
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()
Отредактировано damilkrose (Ноя. 12, 2017 19:19:05)
Офлайн
damilkroseЯ конечно дико извиняюсь, но какой смысл во всем остальном коде после этих строк, с учетом постановки задачи тописктартером?with open("name.txt", "r") as file: lines = len(file.read().split())
[code python][/code]
Отредактировано PEHDOM (Ноя. 12, 2017 21:22:04)
Офлайн