2016-12-16 2 views
0

tar 아카이브에서 단일 파일을 가져 오려고합니다. 나는 tar 파일 라이브러리를 가지고 있고 오른쪽 확장자 목록에서 파일을 찾을 같은 것들을 수행 할 수 있습니다python에서 tarfile lib를 사용하여 tar 파일에서 단일 파일 가져 오기

def xml_member_files(self,members): 
    for tarinfo in members: 
     if os.path.splitext(tarinfo.name)[1] == ".xml": 
      yield tarinfo 


    member_file = self.xml_member_files(tar) 
    for m in member_file:   
     print m.name 

이 큰이며, 출력은 다음과 같습니다 :

RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutBeta.xml 
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutGamma.xml 
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutSigma.xml 
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/product.xml 
자신의 예와 같이

product.xml을 찾으면 작동하지 않습니다.

ti = tar.getmember('product.xml') 
    print ti.name 

내가 손 전에 경로 정보를 추측하고 있기 때문에있는 product.xml을 찾을 수없는 : 그래서이 시도. 한 번 추출 된 내 product.xml 파일을 얻을 수 있도록 경로 정보를 검색하는 방법을 모르겠지만 (어쨌든 어려운 일을하고있는 것 같은 느낌이 들지만) yah, 어떻게 연결 경로를 알아낼 수 있습니까? 그것은 내 다른 파일에 읽기 및 tar 파일에서 추출 된 유일한 파일은 XML 파일을로드하는 기능?

+0

아래 내 대답을 검토하고 문제를 통해 생각에 당신을도 왔습니다 경우 접수 한 upvote에 또는 표시하십시오. –

답변

2

getnames()의 결과를 반복하여 전체 경로를 반환합니다. 예를 들어, lutBeta.xml에 대한 전체 경로를 얻을 수 있습니다 :

tar = tarfile.TarFile('mytarfile.tar') 
membername = [x for x in tar.getnames() if os.path.basename(x) == 'lutBeta.xml'][0] 
1

나는 먼저 TarFile.getnames()을 시도 할 것이고, 그것은 내가 상상 한 것인데, 많은 것은 명령 행에서 tar tzf filename.tar.gz과 같다. 그런 다음 getmember() 또는 getmembers()에 전달할 경로를 찾으십시오.

관련 문제