Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 移动文件并重命名它(如果文件夹中存在)_Python - Fatal编程技术网

Python 移动文件并重命名它(如果文件夹中存在)

Python 移动文件并重命名它(如果文件夹中存在),python,Python,我试图移动文件夹中的文件,但如果dest文件夹中存在此文件名,我希望将其重命名为('name.py(1)') 对于前两个文件,它工作得很好,但在那之后它崩溃了,但我不明白为什么 import os import shutil from airflow import AirflowException uploadPath = '/apps/manu/80_DATA/00_Loading/' dirPath = '/apps/manu/80_DATA/04_Other/' # print('

我试图移动文件夹中的文件,但如果dest文件夹中存在此文件名,我希望将其重命名为('name.py(1)')

对于前两个文件,它工作得很好,但在那之后它崩溃了,但我不明白为什么

import os
import shutil
from airflow import AirflowException


uploadPath  = '/apps/manu/80_DATA/00_Loading/'
dirPath = '/apps/manu/80_DATA/04_Other/'

# print('coucou')
if(os.listdir(uploadPath)):
    for files in os.listdir(uploadPath):
        if not os.listdir(dirPath):
            shutil.move(uploadPath+files, dirPath+files)
            print('no need to rename, so i moved it ...', files)
        else:
            for files in os.listdir(uploadPath):
                addOne=0
                for dirFile in os.listdir(dirPath):
                    if files in dirFile:
                        newName = os.rename(uploadPath+files, dirPath+files+str(addOne))
                        addOne+=1
                        print('renamed in '+str(newName))
                shutil.move(uploadPath+files, dirPath+files)



else:
    print('No file')
    pass
错误是:

FileNotFoundError: [Errno 2] No such file or directory: '/apps/manu/80_DATA/00_Loading/coco.py' -> '/apps/manu/80_DATA/04_Other/coco.py1'
Thx帮助:)

您一直在列出文件

for files in os.listdir(uploadPath):     <<===== files
        if not os.listdir(dirPath):
            shutil.move(uploadPath+files, dirPath+files)
            print('no need to rename, so i moved it ...', files)
        else:
            for files in os.listdir(uploadPath):    <<===== files again
没有经过测试,但我想你已经开始工作了:-)

试试这个:

import os
import shutil
from airflow import AirflowException


uploadPath  = '/apps/manu/80_DATA/00_Loading/'
dirPath = '/apps/manu/80_DATA/04_Other/'

def unique_filename(file):
    duplicate_nr = 0
    base, extension = os.path.splitext(file)
    while os.path.exists(file):
        duplicate_nr += 1
        file = f'{base}({duplicate_nr}){extension}'
    return file

if(os.listdir(uploadPath)):
    for files in os.listdir(uploadPath):
        if not os.listdir(dirPath):
            shutil.move(uploadPath+files, dirPath+files)
            print('no need to rename, so i moved it ...', files)
        else:
            if os.listdir(dirPath):
                upload_files= os.listdir(dirPath)
                for upload_file in upload_files:
                    upload_file_path = os.path.join(uploadPath, upload_file)
                    dir_file_path = os.path.join(dirPath, upload_file)
                    dir_file_path = unique_filename(dir_file_path)
                    os.rename(upload_file_path, dir_file_path)
                    print('upld path', upload_file_path)
                    print('dir path', dir_file_path)
                    print('upld file', upload_file)
                    print('dir file', upload_files)

else:
    print('No file')
    pass

看起来你正在重命名循环中的文件,然后你又在尝试移动它。是的,我猜是这样,但什么时候会这样?因为第一个文件被重命名编辑不起作用,所以文件被删除,我不知道为什么,因为它被签入make_unique_filename upload_file_path=os.path.join(dirPath,upload_file)当然是错误的。很抱歉最后一个问题,为什么文件副本以字符串形式复制,file=coco.py,变成“coco(1.py)”?当我再次尝试“FileNotFoundError:[Errno 2]没有这样的文件或目录:'/apps/manu/80_DATA/00_Loading/coco(1.py'->'/apps/manu/80_DATA/04_Other/coco(1)(1.py')–Filename(duplicate_nr)。ext是删除重复项的常用方法,因为它保留了原有的扩展名。.py文件保持为.py文件,这通常是最方便的。将(1)文件复制到已存在该(1)文件的目录时,会出现(1)(1)。当您将aaaa.bb多次复制到同一目录时,您将得到aaaa(1).bb、aaaa(2).bb等。。。只需玩一些简单的dir示例,看看会发生什么。顺便说一下:file_path=f'{base}{extension}({duplicate_nr}')应该按照您的方式重命名文件。upload_files=os.listdir(dirPath)
import os
import shutil
from airflow import AirflowException


uploadPath  = '/apps/manu/80_DATA/00_Loading/'
dirPath = '/apps/manu/80_DATA/04_Other/'

def unique_filename(file):
    duplicate_nr = 0
    base, extension = os.path.splitext(file)
    while os.path.exists(file):
        duplicate_nr += 1
        file = f'{base}({duplicate_nr}){extension}'
    return file

if(os.listdir(uploadPath)):
    for files in os.listdir(uploadPath):
        if not os.listdir(dirPath):
            shutil.move(uploadPath+files, dirPath+files)
            print('no need to rename, so i moved it ...', files)
        else:
            if os.listdir(dirPath):
                upload_files= os.listdir(dirPath)
                for upload_file in upload_files:
                    upload_file_path = os.path.join(uploadPath, upload_file)
                    dir_file_path = os.path.join(dirPath, upload_file)
                    dir_file_path = unique_filename(dir_file_path)
                    os.rename(upload_file_path, dir_file_path)
                    print('upld path', upload_file_path)
                    print('dir path', dir_file_path)
                    print('upld file', upload_file)
                    print('dir file', upload_files)

else:
    print('No file')
    pass