2016-12-30 22 views
1

Mac OS El Capitan 시스템의 Python 2.7에서 plistlib로 iTunes plist를 처리하려고합니다. 문제는 get ('Tracks')이 분명히 하위 키를 잃어버린 3,006 개의 값을 반환한다는 것입니다. SPECIFIC 트랙의 데이터를 찾아서 다시 작성하는 것이 목표 인 경우 어떻게 처리해야합니까?plistlib로 키에 3,006 개의 값을 가진 iTunes plist를 처리합니다.

이전 단락에 묻어 두었던 것과 같이 정확히 제가 도움이 필요한 것은 인쇄 트랙이 모든 하위 키 값을 나열하지만 자체는 아닌 하위 키입니다. 모든 키가 격리되어 있지 않다는 것을 감안할 때 특정 트랙의 키 값을 검색하려면 어떻게해야합니까? 여기

'내 테스트 코드 : 여기

import plistlib as pl 

plist = pl.readPist('/Users/bryandunphy/Music/iTunes HQR/iTunes Library.xml') 
tracks = pl.get('Tracks') 
print tracks 

내가 생각 예를 들어 데이터 레코드 (그들은 거짓 빈 문자열이나 숫자 0 경우 키가 결석) 모든 가능한 하위 키가 포함되어 있습니다 :

<key>2655</key> 
    <dict> 
     <key>Track ID</key><integer>2655</integer> 
     <key>Size</key><integer>8558199</integer> 
     <key>Total Time</key><integer>210120</integer> 
     <key>Disc Number</key><integer>1</integer> 
     <key>Disc Count</key><integer>2</integer> 
     <key>Track Number</key><integer>5</integer> 
     <key>Track Count</key><integer>17</integer> 
     <key>Date Modified</key><date>2016-12-15T02:13:07Z</date> 
     <key>Date Added</key><date>2016-12-14T11:32:46Z</date> 
     <key>Bit Rate</key><integer>320</integer> 
     <key>Sample Rate</key><integer>44100</integer> 
     <key>Persistent ID</key><string>7BD213A791587573</string> 
     <key>Track Type</key><string>File</string> 
     <key>File Type</key><integer>1295270176</integer> 
     <key>File Folder Count</key><integer>5</integer> 
     <key>Library Folder Count</key><integer>1</integer> 
     <key>Name</key><string>Born To Be Wild</string> 
     <key>Artist</key><string>Steppenwolf</string> 
     <key>Album Artist</key><string>Steppenwolf</string> 
     <key>Album</key><string>Born To Be Wild: A Retrospective</string> 
     <key>Genre</key><string>Rock</string> 
     <key>Kind</key><string>AAC audio file</string> 
     <key>Sort Album Artist</key><string>Steppenwolf</string> 
     <key>Location</key><string>file:///Users/bryandunphy/Music/iTunes%20HQR/iTunes%20Media/Music/Steppenwolf/Born%20To%20Be%20Wild_%20A%20Retrospective/1-05%20Born%20To%20Be%20Wild.m4a</string> 
    </dict> 

기록 위의 파일의 상단은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
    <plist version="1.0"> 
    <dict> 
     <key>Major Version</key><integer>1</integer> 
     <key>Minor Version</key><integer>1</integer> 
     <key>Application Version</key><string>12.5.4.42</string> 
     <key>Date</key><date>2017-01-02T02:41:51Z</date> 
     <key>Features</key><integer>5</integer> 
     <key>Show Content Ratings</key><true/> 
     <key>Library Persistent ID</key><string>4FA8621533B66A9E</string> 
     <key>Tracks</key> 
    <dict> 
+0

당신은 이미 작성한 코드 중 일부를 보여주기 위해 질문을 편집해야합니다. 평범한'python' 태그와 같은 태그를 추가하고 관련 태그가있는 경우'plistlib '태그를 추가 할 수도 있습니다. – Blckknght

+0

질문과 태그를 편집하고 싶지만 그 방법을 모르겠습니다. –

+0

현재 태그 바로 아래에 "편집"링크가 있어야합니다. – Blckknght

답변

0

는 이제 아이튠즈 PLIST의 F를 가정 해 봅시다 ILE는 다음과 같이이다 :

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Major Version</key><integer>1</integer> 
    <key>Minor Version</key><integer>1</integer> 
    <key>Application Version</key><string>4.6</string> 
    <key>Music Folder</key> 
    <string>/Users/bryandunphy/Music/iTunes HQR/iTunes Library.xml</string> 
    <key>Library Persistent ID</key><string>8E84CC790968E27F</string> 
    <key>Tracks</key> 
    <dict> 
    <key>2655</key> 
    <dict> 
     <key>Track ID</key><integer>2655</integer> 
     <key>Size</key><integer>8558199</integer> 
     <key>Total Time</key><integer>210120</integer> 
     <key>Disc Number</key><integer>1</integer> 
     <key>Disc Count</key><integer>2</integer> 
     <key>Track Number</key><integer>5</integer> 
     <key>Track Count</key><integer>17</integer> 
     <key>Date Modified</key><date>2016-12-15T02:13:07Z</date> 
     <key>Date Added</key><date>2016-12-14T11:32:46Z</date> 
     <key>Bit Rate</key><integer>320</integer> 
     <key>Sample Rate</key><integer>44100</integer> 
     <key>Persistent ID</key><string>7BD213A791587573</string> 
     <key>Track Type</key><string>File</string> 
     <key>File Type</key><integer>1295270176</integer> 
     <key>File Folder Count</key><integer>5</integer> 
     <key>Library Folder Count</key><integer>1</integer> 
     <key>Name</key><string>Born To Be Wild</string> 
     <key>Artist</key><string>Steppenwolf</string> 
     <key>Album Artist</key><string>Steppenwolf</string> 
     <key>Album</key><string>Born To Be Wild: A Retrospective</string> 
     <key>Genre</key><string>Rock</string> 
     <key>Kind</key><string>AAC audio file</string> 
     <key>Sort Album Artist</key><string>Steppenwolf</string> 
     <key>Location</key><string>file:///Users/bryandunphy/Music/iTunes%20HQR/iTunes%20Media/Music/Steppenwolf/Born%20To%20Be%20Wild_%20A%20Retrospective/1-05%20Born%20To%20Be%20Wild.m4a</string> 
    </dict> 
    </dict> 
</dict> 
</plist> 

테스트 코드는 출력이 같은 사전은 것입니다 : 각 트랙의 하위 키 값을 얻을하려는 경우

{'2655': {'Album': 'Born To Be Wild: A Retrospective', 'Persistent ID': '7BD213A791587573', 'Track Number': 5, 'Album Artist': 'Steppenwolf', 'Track Type': 'File', 'File Folder Count': 5, 'Disc Number': 1, 'Total Time': 210120, 'Artist': 'Steppenwolf', 'Track Count': 17, 'Genre': 'Rock', 'Bit Rate': 320, 'Kind': 'AAC audio file', 'Name': 'Born To Be Wild', 'Sample Rate': 44100, 'Disc Count': 2, 'Sort Album Artist': 'Steppenwolf', 'File Type': 1295270176, 'Track ID': 2655, 'Location': 'file:///Users/bryandunphy/Music/iTunes%20HQR/iTunes%20Media/Music/Steppenwolf/Born%20To%20Be%20Wild_%20A%20Retrospective/1-05%20Born%20To%20Be%20Wild.m4a', 'Date Modified': datetime.datetime(2016, 12, 15, 2, 13, 7), 'Library Folder Count': 1, 'Date Added': datetime.datetime(2016, 12, 14, 11, 32, 46), 'Size': 8558199}} 

, 당신은 다음과 같이 코딩 할 수 있습니다 :

for id, track_info in tracks.items(): 
    print id, track_info.values() 

출력 같다 :

2655 ['Born To Be Wild: A Retrospective', '7BD213A791587573', 5, 'Steppenwolf', 'File', 5, 1, 210120, 'Steppenwolf', 17, 'Rock', 320, 'AAC audio file', 'Born To Be Wild', 44100, 2, 'Steppenwolf', 1295270176, 2655, 'file:///Users/bryandunphy/Music/iTunes%20HQR/iTunes%20Media/Music/Steppenwolf/Born%20To%20Be%20Wild_%20A%20Retrospective/1-05%20Born%20To%20Be%20Wild.m4a', datetime.datetime(2016, 12, 15, 2, 13, 7), 1, datetime.datetime(2016, 12, 14, 11, 32, 46), 8558199] 
,935,
2655 [('Album', 'Born To Be Wild: A Retrospective'), ('Persistent ID', '7BD213A791587573'), ('Track Number', 5), ('Album Artist', 'Steppenwolf'), ('Track Type', 'File'), ('File Folder Count', 5), ('Disc Number', 1), ('Total Time', 210120), ('Artist', 'Steppenwolf'), ('Track Count', 17), ('Genre', 'Rock'), ('Bit Rate', 320), ('Kind', 'AAC audio file'), ('Name', 'Born To Be Wild'), ('Sample Rate', 44100), ('Disc Count', 2), ('Sort Album Artist', 'Steppenwolf'), ('File Type', 1295270176), ('Track ID', 2655), ('Location', 'file:///Users/bryandunphy/Music/iTunes%20HQR/iTunes%20Media/Music/Steppenwolf/Born%20To%20Be%20Wild_%20A%20Retrospective/1-05%20Born%20To%20Be%20Wild.m4a'), ('Date Modified', datetime.datetime(2016, 12, 15, 2, 13, 7)), ('Library Folder Count', 1), ('Date Added', datetime.datetime(2016, 12, 14, 11, 32, 46)), ('Size', 8558199)] 
+0

도움을 주셔서 감사합니다. 다시 작성된 테스트 코드가 파일을 올바르게 구문 분석하고 있습니다. –