我希望在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))