Переименовать файл после распаковки - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь переименовать файлы перед извлечением, используя os.rename()

def unzip(date,day,zip_file):

        dest_dir = 'C:/Users/mbelahce040119/PycharmProjects/kpi/flats'

        with ZipFile(zip_file) as zipObj:
            files_sat = list()
            for zip_info in zipObj.infolist():
                if zip_info.filename[-1] == '/':
                    continue
                if zip_info.filename.startswith(date,42,50):
                    files_sat.append(zip_info.filename)
                    zip_info.filename = os.path.basename(max(files_sat))
            print(max(files_sat))
            zipObj.extract(max(files_sat), dest_dir)
            old_file = os.path.join(dest_dir,max(files_sat))
            new_file = os.path.join(dest_dir,date+'_D+'+day+'.csv')
            os.rename(old_file,new_file)

Однако я не знаю, как передать новое имя файла в функцию извлечения, и не знаю, должно ли оно быть до или после извлечения. На данный момент никакого извлечения не происходит, потому что я изменил имя в строке раньше.

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Вот альтернативная версия, использующая pathlib:

from pathlib import Path
from zipfile import ZipFile


def unzip(date, day, zip_file):
    dest_dir = Path('C:/Users/mbelahce040119/PycharmProjects/kpi/flats')
    with ZipFile(zip_file) as zipObj:
        filelist = []
        for file in zipObj.infolist():
            if file.filename.startswith(date, 42, 50) and not file.is_dir():
                filelist.append(Path(file.filename))
        final_file = sorted(filelist).pop()
        zipObj.extract(final_file, dest_dir)
        final_file = dest_dir/final_file.name
        final_file.rename(dest_dir/f'{date}_D{day}.csv')

Это не проверено, так как я написал его на основе вашего исходного кода.

0 голосов
/ 07 мая 2019

Я понял это. Проблема заключалась в том, что я уже изменил имя файла на basename, поэтому мне пришлось переименовать его, используя basename.

def unzip(date,day,zip_file):

        dest_dir = 'C:/Users/mbelahce040119/PycharmProjects/kpi/flats'

        with ZipFile(zip_file) as zipObj:
            files_sat = list()
            for zip_info in zipObj.infolist():
                if zip_info.filename[-1] == '/':
                    continue
                if zip_info.filename.startswith(date,42,50):
                    files_sat.append(zip_info.filename)
                    zip_info.filename = os.path.basename(max(files_sat))
            print(max(files_sat))
            final_file = max(files_sat)
            zipObj.extract(final_file, dest_dir)
            old_file = os.path.join(dest_dir,os.path.basename(final_file))
            new_file = os.path.join(dest_dir,date+'_D+'+day+'.csv')
            os.rename(old_file,new_file)
...