У меня есть CSV-файл с более чем 60 миллионов записей в нем в формате,Читать определенный диапазон дат из CSV-файла с помощью Python
2013-07-23 17:04:34, some data, some more data
Я хочу написать скрипт на Python, который позволяет пользователю ставить в дате «Кому» и «От» в формате «2013-04-23» и «2013-04-25». Затем я хочу искать все записи в этом диапазоне и отображать их.
Я использую Python 2.7 на машине Windows 7 (с использованием Eclipse), но по завершении этот скрипт будет работать на сервере Red Hat Linux.
Таким образом, уменьшенная версия того, что у меня есть:
if __name__ == '__main__':
from_date = raw_input('\nEnter FROM Date (e.g. 2013-11-29) :')
from_date += ' 00:00:00'
print('From date: = ' + from_date)
to_date = raw_input('\nEnter TO Date (e.g. 2013-11-30) :')
to_date += ' 23:59:59'
in_file = './file.csv'
for line in in_file:
fields = line.split(',')
found_from_date = re.match(from_date, fields[0])
if found_from_date:
found_to_date = re.match(to_date, fields[0])
if found_to_date:
print(line)
in_file.close()
Как вы можете видеть, что я в настоящее время использовать регулярное выражение, но это, конечно, означает, что я только подобрать точные совпадения. Я могу, конечно, написать код, который разбивает каждое поле даты и соответствует каждому отдельному полю, но я надеялся, что есть функция диапазона дат, которую я могу использовать.
Я немного поработал с Google и наткнулся на что-то по имени pandas, но перед загрузкой и обучением я просто хотел убедиться, что нет ничего более стандартного/упрощенного, и его можно обновить с помощью диспетчера пакетов Red Hat.
Любые советы были бы весьма полезными.
Заранее спасибо.
Спасибо, что очень безопасно. Получил его для работы с вашими предложениями, но для found_date я сделал это: 'file_date = datetime.datetime.strptime (поля [0],"% Y-% m-% d% H:% M:% S ")'. Единственным недостатком является то, что он работает медленно - требуется 22 минуты для обработки 65 000 000 записей, но он работает. В очередной раз благодарим за помощь. – Bruce
@Bruce Я взглянул на 'strptime', и, по крайней мере, в моей системе, похоже, что он работает где-то примерно в 5-6 раз медленнее, чем' datetime.date' - по общему признанию, вы теряете время, но на основе вашего образца кода I не думайте, что это важно. Я обновил свой ответ, чтобы проанализировать временную часть временной метки (не заметил ее в первый раз), мне было бы интересно узнать, помогает ли она вообще. –
ты чемпион. Скорость резко увеличилась - столько же записей закончилось за 4 минуты 32 секунды. Задача решена! – Bruce