2013-06-13 31 views
8

Tôi có một chương trình đơn giản, tìm tất cả các thư mục nén trong thư mục, nhắm mục tiêu một tệp nén, nhận tệp excel nằm bên trong tệp nén và di chuyển nó đến vị trí khác (nó thực hiện điều này cho tất cả các file excel, cho bao nhiêu thư mục bao giờ nén):Lỗi 32, Python, tệp đang được sử dụng bởi một quy trình khác

path = 'C:\Users\me\Documents\Extract' 
new_path = 'C:\Users\me\Documents\Test' 
i = 0 
for folder in os.listdir(path): 
     path_to_folder = os.path.join(path, folder) 

     zfile = zipfile.ZipFile(os.path.join(path, folder)) 
     for name in zfile.namelist(): 
      if name.endswith('.xls'): 
       new_name = str(i)+'_'+name 
       new_path = os.path.join(new_path, new_name) 
       zfile.close() 
       #os.rename(path_to_folde, new_path) -- ERROR HERE 
       shutil.move(path_to_folde, new_path) -- AND ERROR HERE 
     i += 1 

tôi đã thử 2 cách để di chuyển file excel os.renameshutil.move. Tôi tiếp tục gặp lỗi:

WindowsError: [Error 32] The process cannot access the file beacause it is being used by another process.

Tôi không hiểu tại sao lỗi này vẫn tiếp diễn vì tôi đã đóng mọi thư mục.

+1

Tìm hiểu quy trình đang sử dụng quy trình. Bạn có mở nó trong Excel không? – Blender

+0

Tôi khuyên bạn nên quấn phần thân của vòng lặp 'for' bên trong' try'/'except' - bạn sẽ muốn đóng' zfile' bất kể cái gì. (Tất nhiên tôi có thể hiểu sai về cách thư viện 'zipfile' hoạt động hay bản chất của' WindowsError'.) – 2rs2ts

+0

@Blender Tôi không mở nó trong Excel, tôi đã đóng mọi chương trình trừ Python –

Trả lời

7
path = 'C:\Users\me\Documents\Extract' 
destination_path = 'C:\Users\me\Documents\Test' 
i = 0 
for folder in os.listdir(path): 
    path_to_zip_file = os.path.join(path, folder) 

    zfile = zipfile.ZipFile(path_to_zip_file) 
    for name in zfile.namelist(): 
     if name.endswith('.xls'): 
      new_name = str(i)+'_'+name 
      new_path = os.path.join(destination_path, new_name) 
      # This is obviously going to fail because we just opened it 
      shutil.move(path_to_zip_file, new_path) 
    i += 1 
    zfile.close() 

Đã thay đổi một số tên biến trong đoạn mã của bạn. Bạn có thấy vấn đề của mình bây giờ không? Bạn đang cố gắng di chuyển tệp zip mà quy trình của bạn đã mở. Bạn sẽ cần sao chép tệp .xls đến đích của bạn bằng mô-đun zipfile.

+0

Tôi đang sử dụng một hàm gọi là 'shutil.copy2 (path_to_folder, new_path)', điều này sẽ di chuyển tệp đến một vị trí mới, nhưng vì lý do nào đó tệp bị hỏng. –

+1

Đó là vì bạn đang hành động theo một đối tượng giống như tệp được mô-đun zipfile cung cấp cho bạn. Bạn có thể đã sao chép các byte đã nén. Bạn sẽ phải sử dụng phương pháp này tại một số điểm. http://docs.python.org/2/library/zipfile#zipfile.ZipFile.open – OregonTrail

2

Nếu bạn đang sử dụng máy tính windows, hãy truy cập trình quản lý tác vụ và nhấn vào tab quy trình. Di chuyển xuống bất cứ thứ gì nói python và kết thúc quá trình. Bạn có thể đã có python chạy với cái gì khác. Sau đó thử chạy chương trình python của bạn một lần nữa và nó sẽ làm việc.

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