В данной статье речь пойдет о простой на первой взгляд задаче — считывании числовых данных из текстовых файлов на Python. В сети можно найти десятки способов решения этой задачи, однако эти алгоритмы оказываются малоэффективными при работе с большим объемом данных. В данной статье будут разобраны самые популярные методики, а также произведено сравнение их скорости работы.
Введение
Когда я только начинал изучать Python, главным помощником в работе для меня, как наверное и для большинства программистов, был Stack Overflow. Я почерпнул оттуда много полезной информации, в том числе и о работе с файлами. Однако даже такая тривиальная задача, как оказалось, имеет несколько различных решений, отличающихся друг от друга простотой реализации и скоростью работы.
Большинство предложенных методов предполагают чтение файла построчно с дальнейшим разбиением на блоки и их преобразованием из строкового типа в числовой, поскольку Python в отличии от C/C++ работает с файлами как с массивом строк. Выполнить последовательное чтение данных в массив без преобразования типов, как это можно сделать в C/C++, стандартными средствами языка невозможно (насколько мне известно), и это существенно увеличивает время работы программы при обработке больших объемов данных.
Как измерить быстродействие кода. Python. Александр Килинкаров
Способы чтения данных из файла
Как уже было сказано выше, файлы в Python представляют собой массив строк, поэтому все найденные методы можно символически поделить на два типа в зависимости от используемого подхода:
- построчное считывание с разбиением и преобразованием типов
- использование библиотек, которые средствами других языков (например, C/C++) считывают файл и передают полученные данные интерпретатору Python
Ниже представлена подборка самых популярных методов чтения числовых данных на Python, отмеченных сообществом Stack Overflow как «best answer».
Способ 1 — построчное считывание с преобразованием
Самый популярный и простой вариант. Заключается в построчном чтении с разбиением полученной строки на блоки, которые затем преобразуются к необходимому типу данных (в данном случае float) и добавляются к заранее созданному списку.
data = [] with open(«data.txt») as f: for line in f: data.append([float(x) for x in line.split()])
Способ 2 — преобразование при помощи map
Способ аналогичен предыдущему, за исключением того, что преобразованием данных из строкового формата в числовой занимается функция map.
file = open(«data.txt», «r») data = [map(float, line.split(«t»)) for line in file]
Способ 3 — с использованием регулярного выражения
Python-сообщество
- Начало
- » Python для новичков
- » Как измерять время сортировки
#1 Ноя. 8, 2017 14:09:09
Как измерять время сортировки
Есть вот такой код
Уроки Python / Модуль datetime
import random def Selection_sort_algorithm(a): for i in range(0, len(a) — 1): min = a[i] min_ind = i for j in range(i + 1, len(a)): if a[j] min: min = a[j] min_ind = j a[i], a[min_ind] = a[min_ind], a[i] return a x = [random.randint(0, 99) for i in range(0, 100000)] y = [random.uniform(0, 99) for i in range(0, 100000)] print(x) print(y) x = Selection_sort_algorithm(x) y =Selection_sort_algorithm(y) print(x) print(y)
нужно измерять время сортировки
#2 Ноя. 8, 2017 14:47:10
Как измерять время сортировки
JZ911
смотрите модуль timeit
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#3 Ноя. 8, 2017 17:03:09
Как измерять время сортировки
если можно помогите
#4 Ноя. 8, 2017 18:00:57
Как измерять время сортировки
JZ911
если можно помогите
надо и самому трудиться
>>> from time import time >>> t1 = time();l = [i for i in range(9999999)];print(time() — t1) 0.6199610233306885 >>>
#5 Ноя. 9, 2017 02:20:51
Как измерять время сортировки
>>> import timeit >>> >>> def f(a, b): . return a + b . >>> timer = timeit.Timer(‘f(1, 2)’, ‘from __main__ import f’) >>> >>> timer.timeit() 0.12781486700032474 >>> >>> timer.repeat(3) [0.12270890699983283, 0.1221747099998538, 0.1221186780003336] >>>
Можно и так замерять, но не рекомендуется из-за дополнительной функции lambda
>>> import timeit >>> >>> def f(a, b): . return a + b . >>> timer = timeit.Timer(lambda: f(1, 2)) >>> timer.timeit() 0.20642959999986488 >>> >>> timer.repeat(3) [0.20294039899999916, 0.2028366700001243, 0.20304800399981104] >>>
В общее время добавляется время выполнения дополнительной функции lambda. Но это может пригодиться, если надо по-быстрому сравнить результаты выполнения разных функций и узнать, какая из них быстрее работает.
Отредактировано py.user.next (Ноя. 9, 2017 02:26:06)
Источник: python.su
Модуль time
time.altzone — смещение DST часового пояса в секундах к западу от нулевого меридиана. Если часовой пояс находится восточнее, смещение отрицательно.
time.asctime([t]) — преобразовывает кортеж или struct_time в строку вида «Thu Sep 27 16:42:37 2012». Если аргумент не указан, используется текущее время.
time.clock() — в Unix, возвращает текущее время. В Windows, возвращает время, прошедшее с момента первого вызова данной функции.
time.ctime([сек]) — преобразует время, выраженное в секундах с начала эпохи в строку вида «Thu Sep 27 16:42:37 2012».
time.daylight — не 0, если определено, зимнее время или летнее (DST).
time.gmtime([сек]) — преобразует время, выраженное в секундах с начала эпохи в struct_time, где DST флаг всегда равен нулю.
time.localtime([сек]) — как gmtime, но с DST флагом.
time.mktime(t) — преобразует кортеж или struct_time в число секунд с начала эпохи. Обратна функции time.localtime.
time.sleep(сек) — приостановить выполнение программы на заданное количество секунд.
time.strftime(формат, [t]) — преобразует кортеж или struct_time в строку по формату:
%a | Сокращенное название дня недели |
%A | Полное название дня недели |
%b | Сокращенное название месяца |
%B | Полное название месяца |
%c | Дата и время |
%d | День месяца [01,31] |
%H | Час (24-часовой формат) [00,23] |
%I | Час (12-часовой формат) [01,12] |
%j | День года [001,366] |
%m | Номер месяца [01,12] |
%M | Число минут [00,59] |
%p | До полудня или после (при 12-часовом формате) |
%S | Число секунд [00,61] |
%U | Номер недели в году (нулевая неделя начинается с воскресенья) [00,53] |
%w | Номер дня недели [0(Sunday),6] |
%W | Номер недели в году (нулевая неделя начинается с понедельника) [00,53] |
%x | Дата |
%X | Время |
%y | Год без века [00,99] |
%Y | Год с веком |
%Z | Временная зона |
%% | Знак ‘%’ |
time.strptime(строка [, формат]) — разбор строки, представляющей время в соответствии с форматом. Возвращаемое значение struct_time. Формат по умолчанию: «%a %b %d %H:%M:%S %Y».
Класс time.struct_time — тип последовательности значения времени. Имеет интерфейс кортежа. Можно обращаться по индексу или по имени.
- tm_year
- tm_mon
- tm_mday
- tm_hour
- tm_min
- tm_sec
- tm_wday
- tm_yday
- tm_isdst
time.time() — время, выраженное в секундах с начала эпохи.
time.timezone — смещение местного часового пояса в секундах к западу от нулевого меридиана. Если часовой пояс находится восточнее, смещение отрицательно.
time.tzname — кортеж из двух строк: первая — имя DST часового пояса, второй — имя местного часового пояса.
Для вставки кода на Python в комментарий заключайте его в теги
Источник: pythonworld.ru