打开嵌套文件结构中引用的文件
Open files referenced in nested file structure
我有一个 xml 文件结构,其主要 xml 引用其他一些 xml 文件(具有完整路径),而这些其他文件引用其他文件,依此类推。
我有很多 xml 文件(在一个简单的文件夹结构中,只有一个主文件夹和 3 个子文件夹)但并非所有文件都在其他 xml 文件中被引用,所以我的想法是构建一个仅包含引用的 xml 个文件。
[编辑]
这是一个非常简化的 xml 文件示例。 main.xml 很像这样。其他文件没有 children 标记,因此它们是嵌套参考行的结尾。
<?xml version="1.0" encoding="UTF-8" ?>
<file>
<indiv>
<name>Name Surname</name>
<birth> Oct 1826 </birth>
<death> Jan 1850 </death>
</indiv>
<children>
<chname1>Name1 Surname1</chname1>
<chcode1>F45DH3</chcode1><chdata1>C:\base\codedb\F45DH3.xml</chdata1>
<chname2>Name2 Surname2</chname2>
<chdata2>C:\base\namedb\name2sur2.xml</chdata2>
</children>
</file>
[/编辑]
由于文件太多需要手动检查,我想使用 python 脚本从我的主路径开始读取所有文件并构建列表。
我该怎么做。
这是我目前所拥有的,但显然这些代码会很长,因为我不知道我会找到多少级别的引用。
有什么想法吗?
coreFile= r"C:\base\main.xml"
xmlList = []
with open(coreFile) as f:
for line in f:
if "C:\base" in line:
start = line.find('C:\base')
end = line.find('.xml')
path = line[start:end + 4]
if path not in xmlList:
x.append(path)
with open(path) as f2:
for line2 in f2:
if "C:\base" in line2:
start = line.find('C:\base')
end = line.find('.xml')
path = line[start:end + 4]
if path not in xmlList:
x.append(path)
with open(path) as f3:
# ...
所以我自己找到了答案。
万一它可以帮助到别人,就像使用函数一样简单。
请记住,当并非文件夹结构中的所有文件都在其他文件中引用时,此方法很有用,因此您需要阅读主文件并继续阅读下一级别中引用的文件。
如果您想要在文件夹结构中的所有文件中查找文件引用,请忘记这一点。只需阅读文件夹和子文件夹中的每个文件。
def xmlRefs(filepath):
with open(filepath) as f:
for line in f:
if "C:\base" in line:
start = line.find('C:\base')
end = line.find('.xml')
path = line[start:end + 4]
if path not in xmlList:
x.append(path)
xmlList.append(path)
print path
xmlRefs(path)
coreFile= r"C:\base\main.xml"
xmlList = []
xmlRefs(coreFile)
我有一个 xml 文件结构,其主要 xml 引用其他一些 xml 文件(具有完整路径),而这些其他文件引用其他文件,依此类推。 我有很多 xml 文件(在一个简单的文件夹结构中,只有一个主文件夹和 3 个子文件夹)但并非所有文件都在其他 xml 文件中被引用,所以我的想法是构建一个仅包含引用的 xml 个文件。
[编辑] 这是一个非常简化的 xml 文件示例。 main.xml 很像这样。其他文件没有 children 标记,因此它们是嵌套参考行的结尾。
<?xml version="1.0" encoding="UTF-8" ?>
<file>
<indiv>
<name>Name Surname</name>
<birth> Oct 1826 </birth>
<death> Jan 1850 </death>
</indiv>
<children>
<chname1>Name1 Surname1</chname1>
<chcode1>F45DH3</chcode1><chdata1>C:\base\codedb\F45DH3.xml</chdata1>
<chname2>Name2 Surname2</chname2>
<chdata2>C:\base\namedb\name2sur2.xml</chdata2>
</children>
</file>
[/编辑]
由于文件太多需要手动检查,我想使用 python 脚本从我的主路径开始读取所有文件并构建列表。 我该怎么做。
这是我目前所拥有的,但显然这些代码会很长,因为我不知道我会找到多少级别的引用。 有什么想法吗?
coreFile= r"C:\base\main.xml"
xmlList = []
with open(coreFile) as f:
for line in f:
if "C:\base" in line:
start = line.find('C:\base')
end = line.find('.xml')
path = line[start:end + 4]
if path not in xmlList:
x.append(path)
with open(path) as f2:
for line2 in f2:
if "C:\base" in line2:
start = line.find('C:\base')
end = line.find('.xml')
path = line[start:end + 4]
if path not in xmlList:
x.append(path)
with open(path) as f3:
# ...
所以我自己找到了答案。
万一它可以帮助到别人,就像使用函数一样简单。
请记住,当并非文件夹结构中的所有文件都在其他文件中引用时,此方法很有用,因此您需要阅读主文件并继续阅读下一级别中引用的文件。
如果您想要在文件夹结构中的所有文件中查找文件引用,请忘记这一点。只需阅读文件夹和子文件夹中的每个文件。
def xmlRefs(filepath):
with open(filepath) as f:
for line in f:
if "C:\base" in line:
start = line.find('C:\base')
end = line.find('.xml')
path = line[start:end + 4]
if path not in xmlList:
x.append(path)
xmlList.append(path)
print path
xmlRefs(path)
coreFile= r"C:\base\main.xml"
xmlList = []
xmlRefs(coreFile)