想在python中重命名两个扩展名不同的文件吗
我在一个项目中工作,我需要重命名同一文件夹中的多个文件,为此我写下代码,但当我运行此代码时,它会抛出类似“文件已存在”的错误。有没有什么方法可以让我跳过那些已经存在于Seqqnce中的文件,并按顺序重命名文件的其余部分,请帮助我 文件示例:想在python中重命名两个扩展名不同的文件吗,python,Python,我在一个项目中工作,我需要重命名同一文件夹中的多个文件,为此我写下代码,但当我运行此代码时,它会抛出类似“文件已存在”的错误。有没有什么方法可以让我跳过那些已经存在于Seqqnce中的文件,并按顺序重命名文件的其余部分,请帮助我 文件示例: 0.png 0.xml 我写的代码: import os png_files = set() xml_files = set() base_path = r'C://Users//admin//Desktop//anota
0.png
0.xml
我写的代码:
import os
png_files = set()
xml_files = set()
base_path = r'C://Users//admin//Desktop//anotate'
for x in os.listdir(base_path):
name, ext = x.split('.')
if ext == 'png':
png_files.add(name)
elif ext == 'xml':
xml_files.add(name)
counter = 0
for filename in png_files.intersection(xml_files): # For files that are common (same names)
if filename.exists():
print ("File exist")
else:
os.rename(os.path.join(base_path,filename+'.png'),os.path.join(base_path,str(counter)+'.png'))
#Rename png file
os.rename(os.path.join(base_path,filename+'.xml'),os.path.join(base_path,str(counter)+'.xml')) #
Rename xml file
counter += 1 # Increment counter
请确保将您的文件夹复制为备份,因为这将删除您的旧文件夹,而将放置一个同名的新文件夹,以防出现任何问题。
从pathlib导入路径
目录=路径(“./注释”)
out\u dir=路径(“/out”)
out_dir.mkdir(exist_ok=True)
pngs=list(directory.glob(“*.png”))
xmls=list(directory.glob(“*.xml”))
对于num,枚举中的文件(pngs):
write_here=out_dir/“{}.png”。格式(num)
在此处写入。写入字节(file.read\u bytes())
对于num,枚举中的文件(xmls):
write_here=out_dir/“{}.xml”。格式(num)
在此处写入。写入字节(file.read\u bytes())
对于目录.iterdir()中的文件:
文件。取消链接()
directory.rmdir()目录
输出目录重命名(目录)
将base_dir变量更改为包含图像和XML的文件夹的路径。输出将在
当前工作目录中名为Out的文件夹中生成
示例:
假设您的annotate
文件夹如下所示
/Annotate
--/0.png
--/0.xml
--/1.png
--/1.xml
--/dog.png
--/dog.xml
--/cat.png
--/cat.xml
运行脚本后,Annotate
文件夹如下所示
/Annotate
--/0.png
--/0.xml
--/1.png
--/1.xml
--/2.png
--/2.xml
--/3.png
--/3.xml
我没有完全重命名文件,但我正在创建一个新目录,使用您想要的文件命名格式。
注意:
如果注释更多图像,即在注释更多图像后再次运行脚本,我建议您删除旧的输出文件夹。不过,为了安全起见,这不要紧
确保安装了最新的python。
根据要求,这里是一步一步的代码解释!
您需要导入所需的模块
从pathlib导入路径
创建两个路径对象:
1.目录
指定输入目录路径。
2. <代码>输出目录
指定临时输出文件夹的路径
目录=路径(“./注释”)
out\u dir=路径(“/out”)
创建路径对象中指定的文件夹,如果文件夹不存在,则不会抛出错误,代码将继续
out\u dir.mkdir(exist\u ok=True)
将选定路径对象内以.png
和.xml
结尾的所有路径制作两个单独的python列表
pngs=list(directory.glob(“*.png”))
xmls=list(directory.glob(“*.xml”))
循环遍历python列表pngs
和xmls
,并使用输出路径对象位置中的enumerate索引指定的名称写下所选文件的二进制数据
对于num,枚举中的文件(pngs):
write_here=out_dir/“{}.png”。格式(num)
在此处写入。写入字节(file.read\u bytes())
对于num,枚举中的文件(xmls):
write_here=out_dir/“{}.xml”。格式(num)
在此处写入。写入字节(file.read\u bytes())
从指定的路径对象中删除所有内容。然后删除路径对象。 并将临时路径对象重命名为刚刚删除的旧路径
用于目录.iterdir()中的文件:
文件。取消链接()
directory.rmdir()目录
输出目录重命名(目录)
我不明白!!你想干什么!所以你有文件夹注释,比如0.png
,1.xml
。。。您想根据您的计数器重命名它们吗??我是说我不懂那部分。你到底想干什么!假设你有像0.png
,1.png
<代码>10.png。现在,当你在你的基本文件夹中将say0.png
重命名为10.png
时,你已经有了10.png
,这就是为什么重命名时显示文件存在错误告诉我你在做什么,我可能会用另一种方法帮助你:)目前你的问题很难理解,因为你发布的代码不正确格式化。你能重新修改你的代码使它看起来正确吗?将实际错误添加到您的问题中也很有帮助,包括回溯您需要使用“@”符号提及用户,否则我们将不会收到您的评论通知。因此,在写评论之前,只需在评论中添加“@name!!:)评论不用于扩展讨论;这段对话已经结束。