Python 移动文件并重命名它(如果文件夹中存在)
我试图移动文件夹中的文件,但如果dest文件夹中存在此文件名,我希望将其重命名为('name.py(1)') 对于前两个文件,它工作得很好,但在那之后它崩溃了,但我不明白为什么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('
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