2011-08-10 46 views
10

Tôi đã học python được khoảng 3 tuần, và tôi hiện đang cố gắng viết một kịch bản nhỏ để sắp xếp các tệp (khoảng 10.000) theo từ khóa và ngày xuất hiện trong tên tệp. Các tệp trước một ngày nhất định phải được thêm vào một tệp lưu trữ. Việc phân loại hoạt động tốt, nhưng không phải là lưu trữPython: Đưa tệp vào lưu trữ không có thư mục?

Nó tạo lưu trữ - tên là tốt - nhưng trong lưu trữ là đường dẫn đầy đủ đến tệp. Nếu tôi mở nó, có vẻ như: folder1 -> folder2 -> folder3 -> files.

Làm cách nào để thay đổi tệp lưu trữ sao cho tệp lưu trữ chỉ chứa các tệp chứ không phải toàn bộ cấu trúc?

Dưới đây là một đoạn với chức năng zip của tôi, node là con đường mà các tập tin đã trước khi phân loại, folder là một thư mục con với các tập tin được sắp xếp theo một từ khóa trong tên, items là các thư mục với các tập tin được sắp xếp theo ngày.

Tôi đang sử dụng Python 2,6

def ZipFolder(node, zipdate): 
    xynode = node + '/xy' 
    yznode = node + '/yz' 
    for folder in [xynode,yznode]: 
     items = os.listdir(folder) 
     for item in items: 
      itemdate = re.findall('(?<=_)\d\d\d\d-\d\d', item) 
      print item 
      if itemdate[0] <= zipdate: 
       arcname = str(item) + '.zip' 
       x = zipfile.ZipFile(folder + '/' + arcname, mode='w', compression = zipfile.ZIP_DEFLATED) 
       files = os.listdir(folder + '/' + item) 
       for f in files: 
        x.write(folder + '/' + item + '/' + f) 
        print 'writing ' + str(folder + '/' + item + '/' + f) + ' in ' + str(item) 
       x.close() 
       shutil.rmtree(folder + '/' + item) 
    return 

Tôi cũng mở cửa cho bất cứ đề nghị và cải tiến.

Trả lời

13

Từ sự giúp đỡ (zipfile):

| write(self, filename, arcname=None, compress_type=None) 
|  Put the bytes from filename into the archive under the name 
|  arcname. 

Vì vậy, hãy thử thay đổi ghi của bạn() gọi với:

x.write(folder + '/' + item + '/' + f, arcname = f) 

Về mã của bạn, có vẻ như với tôi đủ tốt, đặc biệt cho 3 tuần pythonist, mặc dù một vài nhận xét sẽ được hoan nghênh ;-)

+0

Không phải là nhận xét nhưng docstring. Giải thích chức năng làm gì và nó có ích gì, không phải cách thức hoạt động và docstring hữu ích nhất cho điều đó. –

+0

tuyệt vời nó hoạt động, thx cho sự giúp đỡ nhanh chóng. – rny

+0

@Jan Hudec: với docstring bạn có nghĩa là sth như thế này: def ZipFolder (nút, zipdate): "" "nén tệp cũ hơn 'zipdate' trong các thư mục con của 'nút'" "" – rny

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