朋友们,大家好。我无法弄清楚这个问题。程序应在给定的 /Old 目录(以及所有子目录)中搜索所有 *.dxf,对图形进行典型更改,然后以相同的名称和相同的路径结构保存到 /New 目录。
from pathlib import Path
import glob
import ezdxf
from google.colab import drive
drive.mount('/content/drive', force_remount=True)
# Путь к старому каталогу
old_path = Path('/content/drive/My Drive/Старые')
# Путь к новому каталогу
new_path = Path('/content/drive/My Drive/Новые')
def save_new_dxf(file, doc):
# Создаем новый путь для файла в новом каталоге
new_file = new_path / file.name
parent_dir = new_file.parent
if not parent_dir.exists():
parent_dir.mkdir(parents=True)
doc.saveas(str(new_file))
def change_dxf(file):
# Открываем чертеж
doc = ezdxf.readfile(str(file))
# Тут вносим типовые изменения
# Передаём файл на сохранение
save_new_dxf(file, doc)
# Перебираем все файлы в старом каталоге и подкаталогах с расширением .dxf
for file in old_path.glob('**/*.dxf'):
change_dxf(file)
一切正常,有变化,但文件保存在 /New 目录中,没有结构,即所有文件都在一个文件夹中。
我怀疑错误是doc.saveas(str(new_file))- 如何将子目录添加到路径中?
您可以通过以下方式创建新文件的路径
new_file = new_path / file.name。但是,file.name这只是文件名(不包括前面的文件夹)。结果new_file始终由新文件夹的路径和文件名相加而成。要从旧结构添加子文件夹名称,您可以使用PurePath.relative_to函数。通过此功能,您可以获得从文件名开始到旧文件夹的路径(不包括它,以及结构中更高的文件夹)。
当为新文件创建路径时
new_file = new_path / file.relative_to(old_path),我们将添加如下内容:调整后的功能: