Как решить новую / обновленную проблему списка файлов Python - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу сохранить имя файла и измененную временную метку даты в списке списков в формате Python 3.6 для конкретной папки.

Предположим, что в первый день у меня есть два файла в папке, поэтому у меня естьследующий список списков:

day_1_List = [["f1", "2019-03-27T07:36:45Z"], ["f2", "2019-03-31T07:36:45Z"]]

Теперь во второй день создается другой новый файл "f3" (добавлен новый внутренний список) и обновляется существующий файл "f2" (изменение метки времени):

day_2_List = [["f1", "2019-03-27T07:36:45Z"], ["f2", "2019-04-01T12:23:18Z"], ["f3", "2019-04-02T07:36:45Z"]]

Я хочу запустить логику среди двух списков, которая создаст простой список, который даст мне имена, которые требуют нового извлечения.

output = ["f2", "f3"]

А также обновление дня 1список списков с недавно добавленными (сохраняя внутренние списки этих файлов, которые были удалены во время последнего сравнения.

Раньше это было просто, моя область действия была только до новых файлов, поэтому я поддерживал простой список файловимена и сделал следующую операцию, чтобы получить недавно добавленные файлы:

delta = [item for item in new_list if item not in file_list]

Любая помощь?

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Начните с создания диктовок из ваших списков, что сделает поиск соответствующих имен файлов более эффективным:

day_1_List = [["f1", "2019-03-27T07:36:45Z"], ["f2", "2019-03-31T07:36:45Z"]]
day_2_List = [["f1", "2019-03-27T07:36:45Z"], ["f2", "2019-04-01T12:23:18Z"], ["f3", "2019-04-02T07:36:45Z"]]

day1 = {filename:time for filename, time in day_1_List}
day2 = {filename:time for filename, time in day_2_List}

delta = [filename for filename in day2 if filename not in day1 or day1[filename]<day2[filename]]
print(delta)
# ['f2', 'f3']

Вы также можете создать дикту общих неизмененных файлов между днем ​​1 и днем ​​2:

common = {filename: time for filename, time in day2.items() if day1.get(filename) == time}
print(common)
# {'f1': '2019-03-27T07:36:45Z'}
1 голос
/ 04 апреля 2019

Если вы не хотите использовать словарь, вы можете изменить свой код следующим образом

delta = [item[0] for item in new_list if item[0] not in file_list and item[1] > date_cutoff]

И я бы предложил также преобразовать item[1] в объект datetime для сравнения.

0 голосов
/ 04 апреля 2019

Лучший способ сделать это - выбрать только 1-ую запись в вашем внутреннем списке, например так:

delta = [item[0] for item in day_2_List if item not in day_1_List]

Примечание: Это поможет только в том случае, если вы сможете гарантировать, что day_2_list'f2' имеет только время данных, которое больше, чем day_1_list для начала.

...