Acho que algo deu errado com a criação do arquivo zip, porque quando eu crio um arquivo zip no Windows tem barras (portáteis):
zip.exe -r pip pip
updating: pip/ (244 bytes security) (stored 0%)
adding: pip/pip.log (164 bytes security) (deflated 66%)
Mas agora que você tem os arquivos com nomes de arquivos que contêm "caminhos" com barras invertidas, você pode executar o seguinte programa em unzip_dir
:
#! /usr/bin/env python
# already created directories, walk works topdown, so a child dir
# never creates a directory if there is a parent dir with a file.
made_dirs = set()
for root, dir_names, file_names in os.walk('.'):
for file_name in file_names:
if '\' not in file_name:
continue
alt_file_name = file_name.replace('\', '/')
if alt_file_name.startswith('/'):
alt_file_name = alt_file_name[1:] # cut of starting dir separator
alt_dir_name, alt_base_name = alt_file_name.rsplit('/', 1)
print 'alt_dir', alt_dir_name
full_dir_name = os.path.join(root, alt_dir_name)
if full_dir_name not in made_dirs:
os.makedirs(full_dir_name) # only create if not done yet
made_dirs.add(full_dir_name)
os.rename(os.path.join(root, file_name),
os.path.join(root, alt_file_name))
Isso lida com arquivos em qualquer diretório sob o diretório de onde o programa é iniciado. Dado o problema que você descreve, o unzip_dir
provavelmente não tem nenhum subdiretório para começar, e o programa poderia apenas passar por cima dos arquivos apenas no diretório atual.