如何递归抓取特定文件并将它们的相对路径存储在字典中?

How to grab specific files recursively and store their relative paths in a dictionary?

我想在 Python 3 中编写一个脚本,递归扫描文件夹,找到所有以 .xml 扩展名结尾的文件,并将文件名和相对路径存储在字典中。

结构是这样的:

ROOT (/home/myuser/projects/myproject)
├── src/
│   └── mypythonscript.py
│
└── import/
    └── xml/
        ├── folder1/
        │   ├── filea.json
        │   ├── fileb.json
        │   └── filec.xml
        └── folder2/
            ├── filea.json
            ├── fileb.xml
            └── filec.json

我的基本路径定义为:

basepath = "../import/xml/"

如果我使用 os.path.abspath(),我得到的文件绝对路径无效:

/home/myuser/projects/myproject/src/filec.xml

我正在寻找的是提取看起来更像这样的路径:

../import/xml/folder1/filec.xml

到目前为止我已经试过了:

for folder, subfolder, files in os.walk(basepath):
    for file in files:
        if os.path.splitext(file)[1] == ".xml":
            print(os.path.join(folder, file))

但是,这不会打印任何东西。

如果我使用 print(os.path.relpath(file, basepath)),我会得到一些无效的路径,例如:

../../src/filec.xml

这里的想法是存储 xml 文件的相对路径,以便我可以在之后加载它们并使用 xmltodict 解析它们。

范围是批量解析 XML 文件并从中提取某些节点以将它们推送到其他地方,在那里它们可以由非技术人员编辑。完成后,我需要获取编辑后的数据并将其放回 XML 文件中。因此,我需要这些文件的路径。

我是做错了什么还是应该只使用绝对路径?

这似乎有效:

import os

basepath = "../import/xml/"
for root, dirs, files in os.walk(os.path.relpath(basepath)):
    for file in files:
        print(os.path.join(root, file))