簡體   English   中英

帶有子目錄的Zip目錄在Robot Framework中

[英]Zip directory with subdirectories in Robot Framework

使用Robot Framework,我正在嘗試使用一個文件和三個包含文件的子目錄來壓縮目錄。 我正在使用ArchiveLibrary和關鍵字在目錄中創建Zip From Files。 結果是一個壓縮目錄,其中包含頂層目錄中的一個文件和三個空子文件夾。

如何調整庫以便包含子文件夾的內容?

這是關鍵字最初定義的方式:

def create_zip_from_files_in_directory(self, directory, filename):

    ''' Take all files in a directory and create a zip package from them
    `directory` Path to the directory that holds our files
    `filename` Path to our destination ZIP package.
    '''

    if not directory.endswith("/"):
        directory = directory + "/"
    zip = zipfile.ZipFile(filename, "w")
    files = os.listdir(directory)
    for name in files:
        zip.write(directory + name, arcname=name)
    zip.close()

鏈接到完整的庫。

我一直在嘗試os.walk,沒有成功。

如何在.robot文件中使用關鍵字:

Zip xml file
    ${zipfilename}=    set variable    komplett.zip
    Create zip from Files in directory    ../xml/komplett/  ${zipfilename}

如果它有所作為,我真的只需要解決這個特定情況,而不是一般情況,這意味着我不介意鍵入每個目錄的路徑,然后以某種方式加入,我只是不明白該怎么做...另外,我使用PyCharm作為編輯器,而不是RIDE。

編輯 :當使用庫版本0.4及更高版本時,您可以選擇是否應包含子目錄。 例如:

Create Zip From Files In Directory    ../xml/komplett/  no_sub_folders.zip
Create Zip From Files In Directory    ../xml/komplett/  dir_and_sub_folders.zip   sub_directories=${true}

創建tar的關鍵字有點不同 - 默認情況下它包含子目錄中的文件,現在您可以選擇不:

Create Tar From Files In Directory    ../xml/komplett/  dir_and_sub_folders.tar 
Create Tar From Files In Directory    ../xml/komplett/  no_sub_folders.tar   sub_directories=${false}

sub_directories的默認值基於預先存在的行為,而不是破壞測試用例中的現有用法。


原始答案,版本<0.4:

如果您願意修補庫,此代碼應該:

zip = zipfile.ZipFile(filename, "w")
for path, _, files in os.walk(directory):
    for name in files:
        file_to_archive = os.path.join(path, name)

        # get rid of the starting directory - so the zip structure is top-level starting from it
        file_name = path.replace(directory, '')
        file_name = os.path.join(file_name, name)

        zip.write(file_to_archive, arcname=file_name) # set the desired name in the archive by the arcname argument
zip.close()

編輯:保留 - 子目錄中文件的子目錄結構。 生成的文件位於頂級目標目錄及其所有子目錄(位於其下方(與保留目標目錄的完整路徑的存檔相對))

arcname 參數控制存檔中存儲文件的名稱 - 通過第7行,我們保留相對目錄和文件名。

始終使用os.path.join因為它會自動處理不同文件系統(ntfs / linux / etc)中的差異。

如果最終解決方案適合您,請不要忘記向庫所有者提出補丁 - 回饋社區:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM