2012-12-01 25 views
-2

我正在寻找通过Python重新连接丢失的文件!是否可以读取XML文件,并在标签实例之间获得的文件的名称: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>

+1

是的,它是可能的,你可以发表你的XML的片段? – stackErr

+0

要操纵XML,您可以查看lxml库或BeautifulSoup。后者可能更易于用户使用。 要查看你的目录,你可以看看'os.walk'。 – kreativitea

+0

解释更多...你是否有一个带有文件名和路径的单独XML文件,或者你有多个XML文件,或者......不清楚,但如果你提供更多信息,我们可能会帮助你! – heltonbiker

回答

0

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

from BeautifulSoup import BeautifulStoneSoup 

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

soup = BeautifulStoneSoup(xml_file.read()) 

print soup.prettify() 

然后,你可以遍历XML但是你要找到你所需要的。您可以使用os.walk然后查找文件系统中的文件。

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