2012-12-01 27 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