2017-03-24 24 views
5

Làm việc với Khung công tác Robot, tôi đang cố nén một thư mục với một tệp và ba thư mục con chứa các tệp. Tôi đang sử dụng ArchiveLibrary và từ khóa Tạo Zip từ tệp trong thư mục. Kết quả là một thư mục nén chứa một tệp trong thư mục trên cùng và ba thư mục con trống.Thư mục zip với các thư mục con trong Khung Công tác Robot

Làm cách nào để điều chỉnh thư viện để nội dung của thư mục con cũng được bao gồm?

Đây là cách các từ khoá được ban đầu được xác định:

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() 

Link vào thư viện hoàn chỉnh.

Tôi đã thử nghiệm với os.walk, mà không thành công.

Làm thế nào các từ khóa được sử dụng trong file .robot:

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

Nếu nó làm cho một sự khác biệt, tôi thực sự chỉ cần để giải quyết trường hợp cụ thể này, không phải là một tổng quát, có nghĩa là tôi không tâm gõ vào đường dẫn đến mỗi thư mục và sau đó tham gia bằng cách nào đó, tôi chỉ không hiểu làm thế nào để làm điều đó ... Ngoài ra, tôi sử dụng PyCharm làm biên tập viên, không phải RIDE.

Trả lời

3

EDIT: khi sử dụng thư viện phiên bản 0.4 trở lên, bạn có thể chọn có nên bao gồm các thư mục phụ hay không. Ví dụ:

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} 

Từ khóa để tạo tar là một chút khác nhau - theo mặc định nó bao gồm các tập tin trong thư mục con, và bây giờ bạn có một tùy chọn không:

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} 

Các giá trị mặc định của sub_directories là dựa trên hành vi từ trước, không phá vỡ các tập quán hiện có trong các trường hợp thử nghiệm.


Original câu trả lời, cho các phiên bản < 0.4:

Nếu bạn sẵn sàng vá thư viện, mã này nên làm:

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() 

Edit: giữ gìn cấu trúc thư mục con cho tệp trong - thư mục con. Các tập tin được tạo ra là với cấp cao nhất các mục tiêu, và tất cả các thư mục con của nó - bên dưới nó (như trái ngược với các kho lưu trữ bảo quản đường dẫn đầy đủ đến thư mục đích)

Các arcnameargument controls tên của một tập tin lưu trữ là gì trong kho lưu trữ - và thông qua dòng 7, chúng tôi đang lưu giữ thư mục tương đối cộng với tên tệp.

Luôn sử dụng os.path.join vì nó tự động xử lý sự khác biệt trong các hệ thống tệp khác nhau (ntfs/linux/etc).

Nếu giải pháp cuối cùng phù hợp với bạn, đừng quên đề xuất bản vá cho chủ sở hữu thư viện - trả lại cho cộng đồng :)

+0

Cảm ơn! Điều này đã hạ cánh cho tôi gần hơn một chút, nhưng không hoạt động đúng như mong đợi.Bây giờ tôi nhận được tất cả các tập tin, nhưng thay vào đó các thư mục con được gỡ bỏ. Để thực hiện công việc robot-script, tôi cần giữ cấu trúc chính xác của thư mục (OT: vì kiểm tra thực tế đang chạy thư mục nén thông qua tập lệnh xác thực, trong đó biến thể kiểm tra là thay đổi dữ liệu trong tệp xml được đặt trong thư mục nén) Các thư mục con và cấu trúc cũng có thể được đưa vào không? – Sabotchick

+0

Vâng, "điều đó sẽ dạy tôi đăng bài w/o chạy" :) JK, chỉnh sửa câu trả lời để bao gồm phần đó - cộng thêm làm sạch một số mã không thực sự cần thiết. HTH – Todor

+0

Tuyệt vời, chỉ là những gì tôi muốn! Cảm ơn! :) – Sabotchick

Các vấn đề liên quan