如何将与XML文件名完全相同的文件移动到python中的另一个目录



嗨,我有下面的代码,工作得很好,但我不知道如何将匹配的名称文件移动到相同的目录。例如,我有3个同名文件(xml, jpeg, txt),当我移动xml文件时,我希望所有同名的文件都与它一起移动。我在论坛里找,没有找到任何东西。

import shutil
from pathlib import Path
from xml.etree import ElementTree as ET

def contains_drone(path):
tree = ET.parse(path.as_posix())
root = tree.getroot()
for obj in root.findall('object'):
rank = obj.find('name').text
if rank == 'car':           
return True
return False

def move_drone_files(src="D:\TomProject\Images\", 
dst="D:\TomProject\Done"):
src, dst = Path(src), Path(dst)
for path in src.iterdir():
if path.suffix == '.xml' and contains_drone(path):
print(f'Moving {path.as_posix()} to {dst.as_posix()}')
shutil.move(path, dst)
if __name__ == "__main__":
move_drone_files()

你应该这样做:

import shutil
from pathlib import Path
from xml.etree import ElementTree as ET

def contains_drone(path):
tree = ET.parse(path.as_posix())
root = tree.getroot()
for obj in root.findall('object'):
rank = obj.find('name').text
if rank == 'drone':           
return True
return False

def move_drone_files(src='D:\TomProject\Images', dst='D:\TomProject\Images\Done'):
src, dst = Path(src), Path(dst)
for path in src.iterdir():
if path.suffix == '.xml' and contains_drone(path):
print(f'Moving {path.as_posix()} to {dst.as_posix()}')
shutil.move(path, dst)
if __name__=='__main__':
move_drone_files()

然后简单地用python3 file.py执行你的文件,main中的代码将被执行。

您需要在文件末尾添加if __name__ == "__main__":,并使用您想要调用的函数:

import shutil
from pathlib import Path
from xml.etree import ElementTree as ET

def contains_drone(path):
tree = ET.parse(path.as_posix())
root = tree.getroot()
for obj in root.findall('object'):
rank = obj.find('name').text
if rank == 'drone':           
return True
return False

def move_drone_files(src='D:\TomProject\Images', dst='D:\TomProject\Images\Done'):
src, dst = Path(src), Path(dst)
for path in src.iterdir():
if path.suffix == '.xml' and contains_drone(path):
print(f'Moving {path.as_posix()} to {dst.as_posix()}')
shutil.move(path, dst)
if __name__ == "__main__":
move_drone_files()

在您的代码中,move_drone_files()在自身内部调用contains_drone(path)(参见if path.suffix == '.xml' and contains_drone(path):行),因此似乎您只需要在主部分调用move_drone_files()。然后,您只需要使用cmd执行python脚本:python script.py,python3 script.pypython3.X script.py,具体取决于您安装的python版本。

PD:我修复了你发布的代码中的一些打字错误和标签错误

我猜你的代码中有语法错误:将src='D:\TomProject\Images, dst='D:\TomProject\Images\Done'替换为src="D:\TomProject\Images", dst="D:\TomProject\Images\Done"

此外,去掉def move_drone_files(...)前面的四个空格,否则python会抛出语法错误。

要调用其中一个函数,必须键入:

containsdrone('path/to/file')
# and
move_drone_files()
修改后的代码应该是这样的:
import shutil
from pathlib import Path
from xml.etree import ElementTree as ET

def contains_drone(path):
tree = ET.parse(path.as_posix())
root = tree.getroot()
for obj in root.findall('object'):
rank = obj.find('name').text
if rank == 'drone':           
return True
return False

def move_drone_files(src="D:\TomProject\Images", dst="D:\TomProject\Images\Done"):
src, dst = Path(src), Path(dst)
for path in src.iterdir():
if path.suffix == '.xml' and contains_drone(path):
print(f'Moving {path.as_posix()} to {dst.as_posix()}')
shutil.move(path, dst)

containsdrone('path/to/file')
move_drone_files()

最新更新