Итак, я нашел часть ответа, который мне нужен здесь, в следующей ссылке, и он работает до тех пор, пока мои файлы csv находятся в формате 2015-03-01,1,2,3,1,3
для первого столбца. Как сохранить эту работу, когда первый столбец изменения в 2015-03-01 00:00:00.000
Разделить большой файл csv на основе даты в первом столбце Python 3.4.3
How to split a huge csv file based on content of first column?
import csv
from itertools import groupby
for key, rows in groupby(csv.reader(open("largeFile.csv", "r", encoding='utf-16')),
lambda row: row[0]):
with open("%s.txt" % key, "w") as output:
for row in rows:
output.write(",".join(row) + "\n")
Поэтому у меня есть один большой файл с примерно 1.7million строк в нем ...
2015.01.01,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.01,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.01,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.01,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.01,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.01,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.01,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.02,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.02,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.02,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.02,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.03,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015.01.03,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
И программа действительно создает новый текстовый документ для каждого дня, что здорово!
Но когда колонны выглядят следующим образом, он перестает работать.
2015-03-01 00:00:01.000,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015-03-01 00:00:02.000,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015-03-02 00:00:01.000,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015-03-02 00:00:02.000,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015-03-02 00:00:03.000,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015-03-03 00:00:01.000,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
2015-03-03 00:00:02.000,NULL,NULL,NULL,NULL,NULL,0,1,0,1,0,0,0,1
, и это дает мне сообщение об ошибке.
Traceback (most recent call last): File "C:\Python34\Proj\documents\New folder\dataPullSplit2.py", line 6, in with open("%s.txt" % key, "w") as output: OSError: [Errno 22] Invalid argument: '2015-03-01 00:00:00.000.txt'
Может кто-нибудь указать мне в правильном направлении здесь, пожалуйста.
Found Temp Solution
ОК, так что, изменив его с «ш» на «» Я теперь добавление к файлам и с помощью key[:-13]
я смог отрезать штамп времени на имени файла ... это работает ... но это МЕДЛЕННО ... как я могу улучшить это и понять, почему он идет так медленно?
Вот код Сейчас
import csv
from itertools import groupby
for key, rows in groupby(csv.reader(open("asdf2.txt", "r", encoding='utf-16')),
lambda row: row[0]):
with open("%s.txt" % key[:-13], "a") as output:
for row in rows:
output.write(",".join(row) + "\n")
Ну, что, безусловно, работает, как я надеялся, что его сейчас. Единственная проблема, с которой я столкнулся в настоящее время, - это фактическая скорость ее ... В моем файле, который имеет правильное форматирование даты в первый раз, разделение его на 1-дневный приращение занимает от нескольких секунд до минуты, это грубо 270mb и разбивает каждый файл на 86400 строк, так как это количество секунд в каждый день. В следующем файле, где он также показывает часы минут секунд. 000 и т. Д., Расщепление всего на один день от него занимает примерно 7-10 минут. Огромная разница. –
Похоже, что он открывает и закрывает файл много раз, потому что он генерирует так много групп. Группировка по сокращенному ключу, т. Е. Должна помочь только дата. См. Мой обновленный ответ. –
Это ускорило процесс, как ожидалось. Мне было интересно, было ли это то, что он делал, когда я впервые изменил «w» на «a», потому что заметил, что он просто перезаписывает один и тот же файл снова и снова. –