如何解决新/更新的文件python列表问题

时间:2019-04-04 11:30:30

标签: python arrays list-comprehension python-3.6

我想将文件名和修改日期时间戳存储在Python 3.6中特定文件夹的列表格式列表中。

假设在第1天文件夹中有两个文件,因此我具有以下列表列表:

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

现在,在第2天创建另一个新文件“ 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"]

并使用新添加的列表更新列表的第一天列表(保留这些文件的内部列表,这些列表在最近的比较中被删除。

以前很简单,我的工作范围仅涉及到新文件,因此我维护了一个简单的文件名列表,并执行以下操作来获取新添加的文件:

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

有帮助吗?

3 个答案:

答案 0 :(得分:1)

如果您不想使用字典,则可以使用类似这样的代码修改

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

我建议也将item[1]转换为日期时间对象以进行比较。

答案 1 :(得分:1)

首先从列表中构建字典,这使搜索相关文件名更加有效:

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'}

答案 2 :(得分:0)

最好的方法是像这样在内部列表中仅选择第一个条目

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

注意:仅当您可以确保day_2_list'f2'的数据时间比day_1_list开头的数据时间长时,这才有用。