2016-01-22 48 views
1

在Python中,我試圖創建一個tar,其中包含兩個空目錄,然後向tar中的每個空目錄添加一個文件列表。我試過下面這樣做,但它不起作用。在Python中將文件添加到Tar中的空目錄

def ISIP_tar_files(): 
    with tarfile.open("eeg_files.tar", "w") as f: 
     ep_dir = tarfile.TarInfo("Eplilepsy Reports") 
    not_ep_dir = tarfile.TarInfo("Non Epilepsy Reports") 
     ep_dir.type = not_ep_dir.type = tarfile.DIRTYPE 
    f.addfile(ep_dir) 
    f.addfile(not_ep_dir) 
    with ep_dir.open(): 
      for name in ep_list: 
     f.tarfile.add(name) 

老實說,我不相信這是可行的,但它是值得一試,因爲我無法找到谷歌的任何其他解決方案。這只是代碼的一個模塊,它不包含主程序或導入。 ep_list是路徑的文件列表,它類似於:

ep_list = [/data/foo/bar/file.txt, /data/foo/bar2/file2.txt, ...] 

任何Sugegstions?

+0

使用['f.add'](https://docs.python.org/2/library/tarfile.html#tarfile.TarFile.add)而不是'f.addfile'來添加目錄。 –

回答

1
import tarfile 
import os 

ep_list = ['./foo/bar/file.txt', './foo/bar/file2.txt'] 

def ISIP_tar_files(): 
    with tarfile.open("eeg_files.tar", "w") as f: 
     ep_dir = tarfile.TarInfo("Eplilepsy Reports") 
     not_ep_dir = tarfile.TarInfo("Non Epilepsy Reports") 
     ep_dir.type = not_ep_dir.type = tarfile.DIRTYPE 
     ep_dir.mode = not_ep_dir.mode = 0o777 
     f.addfile(ep_dir) 
     f.addfile(not_ep_dir) 
     for name in ep_list: 
      f.add(name, arcname="Eplilepsy Reports/" + os.path.basename(name), recursive=False) 

目錄文件權限模式應該至少對所有者是可執行的。否則它不能被提取。

  • arcname是檔案中文件的替代名稱。
  • 遞歸表示是否保留原始目錄遞歸添加,其默認值爲True。
+0

謝謝。這工作,但它沒有手動添加空目錄。我需要的只是:f.add(name,arcname ='Epilepsy Reports /'+ os.path.basename(name),recursive = False) –

相關問題