如何递归获取特定文件并将其相对路径存储在字典中?

问题描述 投票:0回答:1

我希望在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文件中。因此,我需要一个这些文件的路径。

我做错了什么或者我应该使用绝对路径?

xml python-3.x filepath relative-path python-os
1个回答
0
投票

这似乎有效:

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))
© www.soinside.com 2019 - 2024. All rights reserved.