-2

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

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

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

超过 300 个文件。

XML 片段:

<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>

我们需要在标签中获取名称的<title>地方搜索文件并将其路径放在<file path>.

4

2 回答 2

0

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

from BeautifulSoup import BeautifulStoneSoup

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

soup = BeautifulStoneSoup(xml_file.read())

print soup.prettify() 

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

您可以使用os.walkthen 来查找文件系统中的文件。

于 2012-12-01T19:22:56.620 回答
0

我会使用 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
于 2012-12-01T20:37:54.937 回答