Переименование и архивирование файлов Python - FileNotFoundError - PullRequest
1 голос
/ 15 июня 2019

Просто возвращаюсь в Python и пытаюсь создать сценарий, который будет соответствовать именам файлов, переименовывать, архивировать их, а затем, в конечном счете, создавать из них управляющий файл (этого я еще не написал). Он работает с файлами, размещенными в каталоге, но в конце я получаю сообщение об ошибке: FileNotFoundError: [WinError 2] Системе не удается найти указанный файл: 'A20190331.txt' -> 'B20190530.txt'. Это перезапускает мой цикл txt_files for в начале после переименования? Код, вероятно, не является оптимальным на данный момент.

import os
import zipfile

try:
    import zlib
    compression = zipfile.ZIP_DEFLATED
except:
    compression = zipfile.ZIP_STORED




path = 'mypath'

txt_files = []
for root, dirs, files in os.walk(path):
    for file in files:
        txt_files.append(file)


def create_zip(data_dt):
    for files in txt_files:
        if '.py' in files:
            continue
        elif 'A' in files:
            file_name = 'A' + data_dt + '.txt'
            name_full_path = path +'\\'+ file_name
            os.rename(files, file_name)
            zf = zipfile.ZipFile('A' + data_dt+ '.zip', mode='w')
            zf.write(name_full_path, file_name, compress_type=compression)
            zf.close()
        elif 'B' or 'C' in files:
            file_name = 'B' + data_dt + '.txt'
            name_full_path = path +'\\'+ file_name
            os.rename(files, file_name)
            zf = zipfile.ZipFile('B' + data_dt +'.zip', mode='w')
            zf.write(name_full_path, file_name, compress_type=compression)
            zf.close()
        else:
            break

create_zip('20190530')

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Кристофер.

Я сразу вижу твою проблему:

txt_files = []
for root, dirs, files in os.walk(path):
for file in files:
    txt_files.append(file)

Я полагаю, вы хотите сохранить путь:

for root, dirs, files in os.walk(path):
    for file in files:
        txt_files.append(os.path.join(os.path.get_cwd(), file))

Пусть os.path определит для вас путь - он переносим между платформами и менее подвержен ошибкам.

НТН

0 голосов
/ 15 июня 2019

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

def create_zipe(data_dt):
    for files in txt_files:
        if '.py' in files:
            continue
        elif 'ASS' in files:
            file_name = 'A' + data_dt + '.txt'
            name_full_path = path +'/'+ file_name
            os.rename(files, file_name)
            zf = zipfile.ZipFile('A' + data_dt+ '.zip', mode='w')
            zf.write(name_full_path, file_name, compress_type=compression)
            zf.close()
        elif 'C' in files or 'B' in files:
            file_name = 'B' + data_dt + '.txt'
            print(file_name)
            name_full_path = path +'/'+ file_name
            print(name_full_path)
            os.rename(files, file_name)
            zf = zipfile.ZipFile('B' + data_dt+ '.zip', mode='w')
            zf.write(name_full_path, file_name, compress_type=compression)
            zf.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...