重命名和压缩文件Python-FileNotFoundError

重命名和压缩文件Python-FileNotFoundError,python,zip,file-rename,Python,Zip,File Rename,刚刚回到Python中,我正在尝试构建一个脚本,该脚本将匹配文件名、重命名、压缩它们,然后最终根据它们构建一个控制文件(我还没有编写)。它对目录中的文件起作用,但最后我得到一个错误:FileNotFoundError:[WinError 2]系统找不到指定的文件:“A20190331.txt”->“B20190530.txt”。重命名后是否在开始时重新运行我的txt_文件以进行循环?在这一点上,代码可能不是最优的 import os import zipfile try: import

刚刚回到Python中,我正在尝试构建一个脚本,该脚本将匹配文件名、重命名、压缩它们,然后最终根据它们构建一个控制文件(我还没有编写)。它对目录中的文件起作用,但最后我得到一个错误:FileNotFoundError:[WinError 2]系统找不到指定的文件:“A20190331.txt”->“B20190530.txt”。重命名后是否在开始时重新运行我的txt_文件以进行循环?在这一点上,代码可能不是最优的

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')
克里斯托弗

我立刻发现了你的问题:

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为您处理路径——它可以跨平台移植,并且不易出错


hth

我做了一些修改,你能试试这个吗,但是用你的方式,代码会覆盖文件。 所以试试这个脚本,告诉我你是想覆盖还是只是重命名和压缩

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()

谢谢你的mods,我想先覆盖然后压缩。