我想复制一些重命名的文件
在第一个元素中:src/
是一个目录,357
是ID,1329844313
是时间戳,.jpg
是文件扩展名。
现在我希望列表如下: (目的地目录)+(SALT)+' _' +(ID)+(扩展名) 因为我的盐是:' 423l4kj2342' 我的预期结果将是:
dest/423l4kj2342_357.jpg
我的重命名功能与预期一致。
src/picture-357-1329844313.jpg dest/423l4kj2342_357.jpg
src/picture-57-1329844816.png dest/423l4kj2342_57.png
src/picture-358-1329844317.jpg dest/423l4kj2342_358.jpg
src/picture-57-1329844814.jpg dest/423l4kj2342_57.jpg
src/picture-358-1329844313.jpg dest/423l4kj2342_358.jpg
src/picture-358-1329844325.jpg dest/423l4kj2342_358.jpg
但是,文件被覆盖具有相同的ID。我只想要存在相同ID的最新文件。
现在我的问题是,我怎样才能得到以下结果?复制只包含最新时间戳的相同ID文件?
src/picture-357-1329844313.jpg dest/423l4kj2342_357.jpg
src/picture-57-1329844816.png dest/423l4kj2342_57.png
src/picture-358-1329844325.jpg dest/423l4kj2342_358.jpg
答案 0 :(得分:0)
按ID和时间戳按字典顺序对文件列表进行排序,然后对每个ID仅处理第一个。
如下所示:
def cmp_file(a, b):
id_a, timestamp_a = re.findall(r'\d+', a)
id_b, timestamp_b = re.findall(r'\d+', b)
return 2*cmp(id_a, id_b) + cmp(timestamp_a, timestamp_b)
filelist.sort(cmp=cmp_file, reverse=True)
last_id = None
for file in filelist:
id, timestamp = re.findall(r'\d+',file)
if not last_id == id:
process_file(file)
last_id = id
或者,将文件名放在ID索引的时间戳和文件名元组列表的dict中。然后为每个dict条目找到具有最大时间戳的那个并处理该文件:
index = dict()
for file in filelist:
id, timestamp = re.findall(r'\d+',file)
if not id in index:
index[id] = list()
index[id].append((timestamp, file))
for id, files in index.iteritems():
process_file(files.max(key=lambda a: a[0])[1])