есть zip архивы, нужно получить список уникальных файлов в них, а потом что то с ними сделать
я использую infolist()
и хеширую в md5 CRC+file_size
(в md5 просто для одинаковой длины)
ок, теперь у меня есть хеш, который удобно делать ключом словаря, чтоб проверять на уникальность. но нужна информация, как эти файлы открыть
значение словаря я попробовал писать path_to_zip:filename
выходит
{'53815633de62ce94e36a43a8bb93be7e': '/path/zipfile.zip:contentfile2.txt',
'5ca906d1e42de7d6859b320502ff9317': '/path/zipfile.zip:contentfile.txt',
'1fb71abf56c03621d971c1883a273e9c': '/path/zipfile1.zip:contentfile3.txt'}
теперь можно итерируясь по словарю, делать
split(':')
и всё работает. только это уродство.
не говоря уже о том, что это больше похоже на тест жестких дисков по рандомному чтению
хочу возможность сгруппировать пути до zip файлов, чтоб отрыл один раз, прочёл список всех contentfile[n..].txt и закрыл
пример:
{'/path/zipfile.zip': ['contentfile2.txt', 'contentfile.txt'],
'/path/zipfile1.zip': ['contentfile3.txt']}
как лучше готовить первый словарь с хешами, чтоб потом из него можно было легко сделать то, что в примере?
UPD: что сделать с data, чтоб не городить такой фигни, а как то элегантнее, может есть хитрые sets или reduce?
data= {'53815633de62ce94e36a43a8bb93be7e': '/path/zipfile.zip:contentfile2.txt',
'5ca906d1e42de7d6859b320502ff9317': '/path/zipfile.zip:contentfile.txt',
'1fb71abf56c03621d971c1883a273e9c': '/path/zipfile1.zip:contentfile3.txt'}
new_data = {}
for i in data:
path = data[i].split(':')[0]
fname = data[i].split(':')[1]
if path not in new_data:
new_data[path] = list()
new_data[path].append(fname)
print new_data