嗨,我有下面的代码,工作得很好,但我不知道如何将匹配的名称文件移动到相同的目录。例如,我有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.py
或python3.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()