[英]Move file and rename it if exist in folder
我正在嘗試移動文件夾中的文件,但如果該文件名存在於 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'
謝謝你的幫助:)
你一直在列出文件
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
在第二個循環中,您應該使用另一個變量名,因為它“破壞”了第一個循環。
如果目錄不相等, os.rename 會同時移動和重命名文件。 您不必先重命名文件,然后再移動它。
一些技巧:
您可以將變量名 'files' 更改為 ' file '。 這使您的代碼更加清晰,因為您從列表中一次“for file in os.listdir”迭代一個文件。
模塊 os 包含一個 os.path.exists,因此您不必自己遍歷整個目錄。
制作和使用小函數來簡化你的代碼:
# -----------------------------
def make_unique_filename(file_path):
duplicate_nr = 0
base, extension = os.path.splitext(file_path)
while os.path.exists(file_path):
duplicate_nr += 1
file_path = f'{base}({duplicate_nr}){extension}'
return file_path
# -----------------------------
uploadPath = '/apps/manu/80_DATA/00_Loading/'
dirPath = '/apps/manu/80_DATA/04_Other/'
# -----------------------------
upload_files = os.listdir(uploadPath)
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 = make_unique_filename(dir_file_path)
os.rename(upload_file_path, dir_file_path)
沒有經過測試,但我想你可以正常工作:-))
嘗試這個:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.