gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:39:40 25 4
gpt4 key购买 nike

我正在尝试移动文件夹中的文件,但如果该文件名存在于目标文件夹中,我想将其重命名为('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)

未经测试,但我想你可以正常工作:-))

关于python - 移动文件并重命名(如果文件夹中存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60566331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com