【问题标题】:Python: Read xml and search for missing filesPython:读取 xml 并搜索丢失的文件
【发布时间】:2012-11-19 17:00:23
【问题描述】:

我希望通过 Python 重新连接我丢失的文件!是否可以读取 XML 文件并获取标签之间的文件名示例:

<Name>A013_C025_08264E.MOV</Name>
<Name>A002_C001_BLABLA.MOV</Name>

然后在整个外部驱动器中搜索该文件A013_C025_08264E.MOV, etc,复制他的相关路径并在XML中将元素&lt;path&gt;...&lt;/path&gt;替换为&lt;path&gt;ACTUAL PATH FOR A013_C025_08264E.MOV&lt;/path&gt;

超过 300 个文件。

XML sn-p:

<Media ObjectUID="01718186-c2f3-4c48-9d1a-6305067a5184" ClassID="7a5c103e-f3ac-4391-b6b4-7cc3d2f9a7ff" Version="19" Index="4294967295">
    <IsProxy>false</IsProxy>
    <ActualMediaFilePath></ActualMediaFilePath>
    <RelativePath>../../../../A010_C004_0829D8.MOV</RelativePath>
    <StreamNumber>0</StreamNumber>
    <SingleAudioChannel>-1</SingleAudioChannel>
    <IgnoreAudio>false</IgnoreAudio>
    <IgnoreVideo>false</IgnoreVideo>
    <ConformedAudioRate>9223372036854775807</ConformedAudioRate>
    <CaptureStatus>0</CaptureStatus>
    <OfflineReason>5</OfflineReason>
    <Infinite>false</Infinite>
    <LogComment></LogComment>
    <AlternateTapeName></AlternateTapeName>
    <AlternateStart>0</AlternateStart>
    <FileKey></FileKey>
    <Title>A010_C004_0829D8.MOV</Title>
    <ImplementationID>00000000-0000-0000-0000-000000000000</ImplementationID>
    <Node Version="1">
    </Node>
    <VideoStream ObjectRef="1884"/>
    <TapeName>001</TapeName>
    <FilePath>A010_C004_0829D8.MOV</FilePath>
    <Start>15742672473528000</Start>
</Media>

我们需要在标签&lt;title&gt;中获取名称的地方搜索文件并将他的路径放在&lt;file path&gt;中。

【问题讨论】:

  • 是的,有可能,你能发布你的 XML 的 sn-p 吗?
  • 要操作 XML,您可以查看 lxml 库或 BeautifulSoup。后者可能对用户更友好。要查看您的目录,您可以查看os.walk
  • 解释更多...您是否有一个带有文件名和路径的 XML 文件,或者您有多个 xml 文件,或者...目前尚不清楚,但很可能我们可以帮助您如果您提供更多信息!
  • 我看过您的编辑,但仍然没有太大帮助。 Namepath 标签之间有什么关系?是一个在另一个内部,还是它们都在另一个具有已知名称的父标签内?是否存在一对一或一对多或多对一的关系?
  • 如您所见,我认为替换 就足够了,替换 是没有必要的

标签: python xml file replace reconnect


【解决方案1】:

我会做这样的事情来读取 xml 文件:

from BeautifulSoup import BeautifulStoneSoup

xml_file = open("my_xml_file.xml", "r")

soup = BeautifulStoneSoup(xml_file.read())

print soup.prettify() 

然后您可以遍历 xml,但是您希望找到所需的内容。

您可以使用os.walk 然后在文件系统中查找文件。

【讨论】:

    【解决方案2】:

    我会使用 xml.etree.ElementTree 来解析您的 xml 文件。

    import xml.etree.ElementTree as ET
    import os
    import fnmatch
    tree = ET.parse('fileName.xml')
    root = tree.getroot()
    
    
    #find all media elements
    for media in root.findall('Media'):
        movName = media.find('Title').text
        #find the path to the file
        for root, dirnames, filenames in os.walk('src'):
            for filename in fnmatch.filter(filenames, movName):
                #set the path in the XML file
                media.find('FilePath').text = os.path.join(root, movName)
                #remove the relative path element
                media.remove(RelativePath)
    tree.write('fileName.xml)
    

    我没有测试过,可能有错误。

    您应该阅读文档以获取更多信息:

    1. http://docs.python.org/2/library/xml.etree.elementtree.html
    2. http://docs.python.org/2/library/os.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多