-2

我想复制一些文件并重命名它们

其中第一个元素:src/是目录,357是ID,1329844313是时间戳,.jpg是文件扩展名。

现在我想要列表如下:(目标目录)+(SALT)+'_'+(ID)+(扩展名)因为我的盐是:'423l4kj2342'我的预期结果将是:

    目标/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
4

1 回答 1

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 条目找到具有最大时间戳的条目并处理该文件:

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])
于 2012-09-13T07:16:56.367 回答