Sắp xếp tệp vào các thư mục dựa trên tên tệp Python

Trong chương trước, bạn đã học cách tạo và ghi vào tệp mới trong Python. Các chương trình của bạn cũng có thể sắp xếp các tệp có sẵn trên ổ cứng. Có thể bạn đã từng trải qua một thư mục chứa hàng chục, hàng trăm hoặc thậm chí hàng nghìn tệp và sao chép, đổi tên, di chuyển hoặc nén tất cả chúng bằng tay. Hoặc xem xét các nhiệm vụ như thế này

  • Tạo bản sao của tất cả các tệp PDF (và chỉ các tệp PDF) trong mọi thư mục con của một thư mục

  • Xóa các số 0 đứng đầu trong tên tệp cho mọi tệp trong thư mục gồm hàng trăm tệp có tên spam001. txt , spam002. txt , spam003. txt , v.v.

  • Nén nội dung của một số thư mục vào một tệp ZIP (có thể là một hệ thống sao lưu đơn giản)

Tất cả những thứ nhàm chán này chỉ đang cầu xin được tự động hóa trong Python. Bằng cách lập trình cho máy tính của bạn thực hiện những tác vụ này, bạn có thể biến nó thành một nhân viên hồ sơ làm việc nhanh nhẹn và không bao giờ phạm sai lầm

Khi bạn bắt đầu làm việc với các tệp, bạn có thể thấy hữu ích khi có thể nhanh chóng xem phần mở rộng (. txt ,. pdf ,. jpg , v.v.) của tệp là. Với OS X và Linux, trình duyệt tệp của bạn rất có thể tự động hiển thị các tiện ích mở rộng. Với Windows, phần mở rộng tệp có thể bị ẩn theo mặc định. Để hiển thị tiện ích mở rộng, hãy đi tới Bắt đầuBảng điều khiểnAppearance and PersonalizationFolder Options. On the View tab, under Advanced Settings, uncheck the Ẩn tiện ích mở rộng cho các loại tệp đã biết .

Mô-đun đóng cửa

Mô-đun

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3 (hoặc tiện ích shell) có các chức năng cho phép bạn sao chép, di chuyển, đổi tên và xóa các tệp trong chương trình Python của bạn. Để sử dụng các hàm
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3, trước tiên bạn cần sử dụng
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
5

Sao chép tập tin và thư mục

Mô-đun

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3 cung cấp chức năng sao chép tệp, cũng như toàn bộ thư mục

Gọi

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
7
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
8
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
9 sẽ sao chép tệp tại đường dẫn
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
0
to the folder at the path
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1
. (Both
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
0
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1
đều là chuỗi. ) Nếu
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1
là tên tệp, thì nó sẽ được sử dụng làm tên mới của tệp được sao chép. Hàm này trả về một chuỗi đường dẫn của tệp được sao chép.

Nhập nội dung sau vào trình bao tương tác để xem cách thức hoạt động của

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
5

   >>> import shutil, os
   >>> os.chdir('C:\\')
❶ >>> shutil.copy('C:\\spam.txt', 'C:\\delicious')
   'C:\\delicious\\spam.txt'
❷ >>> shutil.copy('eggs.txt', 'C:\\delicious\\eggs2.txt')
   'C:\\delicious\\eggs2.txt'

Cuộc gọi

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
5 đầu tiên sao chép tệp tại C. \Thư rác. txt vào thư mục C. \ngon . Giá trị trả về là đường dẫn của tệp vừa được sao chép. Lưu ý rằng vì một thư mục được chỉ định làm đích ❶ nên thư rác ban đầu. txt tên tệp được sử dụng cho tên tệp của tệp mới được sao chép. Cuộc gọi
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
5 thứ hai ❷ cũng sao chép tệp tại C. \trứng. txt vào thư mục C. \delicious nhưng đặt tên cho tệp đã sao chép là eggs2. txt .

Trong khi

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
5 sẽ sao chép một tệp duy nhất, thì
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
9 sẽ sao chép toàn bộ thư mục cũng như mọi thư mục và tệp có trong đó. Gọi
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs'
0
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
8
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
9 sẽ sao chép thư mục tại đường dẫn
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
0
, dọc theo . Các tham số
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1
. The
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
0
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1
đều là chuỗi. Hàm trả về một chuỗi đường dẫn của thư mục đã sao chép.

Nhập thông tin sau vào vỏ tương tác

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'

Cuộc gọi

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
9 tạo một thư mục mới có tên bacon_backup có cùng nội dung với bacon< . Bây giờ bạn đã sao lưu an toàn thịt xông khói quý giá của mình. folder. You have now safely backed up your precious, precious bacon.

Di chuyển và đổi tên tệp và thư mục

Gọi

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs'
8
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
8
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
9 sẽ di chuyển tệp hoặc thư mục tại đường dẫn
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
0
to the path
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1
and will return a string of the absolute path of the new location.

Nếu

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1 trỏ đến một thư mục thì
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
0
. Ví dụ: nhập thông tin sau vào trình bao tương tác.
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1
and keeps its current filename. For example, enter the following into the interactive shell:

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'

Giả sử thư mục có tên eggs đã tồn tại trong C. \ , lệnh gọi

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
6 này có nội dung: “Di chuyển C. \Thịt lợn muối xông khói. txt vào thư mục C. \eggs . ”

Nếu đã có thịt xông khói. txt đã có trong C. \eggs , nó sẽ bị ghi đè. Vì rất dễ vô tình ghi đè lên tệp theo cách này, bạn nên cẩn thận khi sử dụng

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
7.

Đường dẫn

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1 cũng có thể chỉ định tên tệp. Trong ví dụ sau, tệp
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
0
được di chuyển được đổi tên.

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'

Dòng này cho biết: “Di chuyển C. \Thịt lợn muối xông khói. txt vào thư mục C. \eggs và trong khi bạn đang ở đó, hãy đổi tên thịt xông khói đó. txt vào new_bacon. txt . ”

Cả hai ví dụ trước đều hoạt động với giả định rằng có một thư mục trứng trong C. thư mục \ . Nhưng nếu không có thư mục trứng thì

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
7 sẽ đổi tên bacon. txt vào tệp có tên eggs .

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs'

Ở đây,

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
7 không thể tìm thấy thư mục có tên eggs trong C. \ và do đó giả sử rằng
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
1
phải chỉ định tên tệp chứ không phải thư mục. Vì vậy, thịt xông khói. txt tệp văn bản được đổi tên thành eggs (tệp văn bản không có . txt phần mở rộng tệp)—có thể không phải là thứ bạn muốn. Đây có thể là một lỗi khó phát hiện trong các chương trình của bạn vì lệnh gọi
>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
7 có thể vui vẻ thực hiện điều gì đó có thể hoàn toàn khác với những gì bạn mong đợi. Đây là một lý do khác để cẩn thận khi sử dụng
>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
7.

Cuối cùng, các thư mục tạo nên đích phải tồn tại, nếu không Python sẽ đưa ra một ngoại lệ. Nhập thông tin sau vào vỏ tương tác

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'

Python tìm kiếm trứngham bên trong thư mục . Nó không tìm thấy thư mục không tồn tại nên không thể di chuyển does_not_exist. It doesn’t find the nonexistent directory, so it can’t move thư rác. txt vào đường dẫn bạn đã chỉ định.

Xóa vĩnh viễn tệp và thư mục

Bạn có thể xóa một tệp hoặc một thư mục trống bằng các chức năng trong mô-đun

import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        os.unlink(filename)
5, trong khi để xóa một thư mục và tất cả nội dung của nó, bạn sử dụng mô-đun
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3

  • Gọi

    import os
    for filename in os.listdir():
        if filename.endswith('.rxt'):
            os.unlink(filename)
    7 ______48_______8
    >>> import shutil
    >>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
    'C:\\eggs\\bacon.txt'
    9 sẽ xóa tệp tại
    import os
    for filename in os.listdir():
        if filename.endswith('.rxt'):
            os.unlink(filename)
    8
    .

  • Gọi

    import os
    for filename in os.listdir():
        if filename.endswith('.rxt'):
            #os.unlink(filename)
            print(filename)
    1 ______48_______8
    >>> import shutil
    >>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
    'C:\\eggs\\bacon.txt'
    9 sẽ xóa thư mục tại
    import os
    for filename in os.listdir():
        if filename.endswith('.rxt'):
            os.unlink(filename)
    8
    . This folder must be empty of any files or folders.

  • Gọi

    import os
    for filename in os.listdir():
        if filename.endswith('.rxt'):
            #os.unlink(filename)
            print(filename)
    5 ______48_______8
    >>> import shutil
    >>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
    'C:\\eggs\\bacon.txt'
    9 sẽ xóa thư mục tại
    import os
    for filename in os.listdir():
        if filename.endswith('.rxt'):
            os.unlink(filename)
    8
    , and all files and folders it contains will also be deleted.

Hãy cẩn thận khi sử dụng các chức năng này trong chương trình của bạn. Trước tiên, bạn nên chạy chương trình của mình với các lệnh gọi này đã được nhận xét và với các lệnh gọi

import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        #os.unlink(filename)
        print(filename)
9 được thêm vào để hiển thị các tệp sẽ bị xóa. Đây là một chương trình Python nhằm xóa các tệp có . txt nhưng có lỗi đánh máy (được tô đậm) khiến nó bị xóa . thay vào đó là các tệp rxt .

import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        os.unlink(filename)

Nếu bạn có bất kỳ tệp quan trọng nào kết thúc bằng . rxt , chúng sẽ vô tình bị xóa vĩnh viễn. Thay vào đó, trước tiên bạn nên chạy chương trình như thế này.

import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        #os.unlink(filename)
        print(filename)

Bây giờ lệnh gọi

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
0 đã được nhận xét, vì vậy Python sẽ bỏ qua nó. Thay vào đó, bạn sẽ in tên tệp của tệp đã bị xóa. Chạy phiên bản này của chương trình trước tiên sẽ cho bạn biết rằng bạn đã vô tình yêu cầu chương trình xóa . rxt thay vì . txt tệp.

Khi bạn chắc chắn rằng chương trình hoạt động như dự định, hãy xóa dòng

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
1 và bỏ ghi chú dòng
>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
2. Sau đó chạy lại chương trình để thực sự xóa các tập tin

Xóa an toàn với Mô-đun send2trash

Vì chức năng

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
3 tích hợp sẵn của Python sẽ xóa các tệp và thư mục một cách không thể đảo ngược, nên việc sử dụng có thể nguy hiểm. Một cách tốt hơn nhiều để xóa tệp và thư mục là sử dụng mô-đun
>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
4 của bên thứ ba. Bạn có thể cài đặt mô-đun này bằng cách chạy
>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
5 từ cửa sổ Terminal. (Xem Phụ lục A để biết giải thích sâu hơn về cách cài đặt các mô-đun của bên thứ ba. )

Sử dụng

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
4 an toàn hơn nhiều so với các chức năng xóa thông thường của Python, vì nó sẽ gửi các thư mục và tệp vào thùng rác hoặc thùng rác trên máy tính của bạn thay vì xóa chúng vĩnh viễn. Nếu một lỗi trong chương trình của bạn xóa thứ gì đó bằng
>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
4 mà bạn không có ý định xóa, thì sau này bạn có thể khôi phục nó từ thùng rác

Sau khi bạn đã cài đặt

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
4, hãy nhập thông tin sau vào trình bao tương tác

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')

Nói chung, bạn nên luôn sử dụng hàm

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
9 để xóa tệp và thư mục. Tuy nhiên, trong khi gửi tệp vào thùng rác cho phép bạn khôi phục chúng sau này, nó sẽ không giải phóng dung lượng ổ đĩa giống như xóa chúng vĩnh viễn. Nếu bạn muốn chương trình của mình giải phóng dung lượng ổ đĩa, hãy sử dụng hàm
import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        os.unlink(filename)
5 và
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3 để xóa tệp và thư mục. Lưu ý rằng hàm
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
2 chỉ có thể gửi tệp vào thùng rác;

Đi bộ trên cây thư mục

Giả sử bạn muốn đổi tên mọi tệp trong một số thư mục và cả mọi tệp trong mọi thư mục con của thư mục đó. Tức là bạn muốn đi qua cây thư mục, chạm vào từng tệp khi bạn đi. Viết một chương trình để làm điều này có thể khó khăn;

Hãy nhìn vào C. \delicious với nội dung của nó, được hiển thị trong.

Sắp xếp tệp vào các thư mục dựa trên tên tệp Python

Hình 9-1. Một thư mục ví dụ chứa ba thư mục và bốn tệp

Đây là một chương trình ví dụ sử dụng hàm

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3 trên cây thư mục từ

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')

Hàm

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3 được truyền một giá trị chuỗi đơn. đường dẫn của một thư mục. Bạn có thể sử dụng
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3 trong câu lệnh vòng lặp
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
6 để duyệt cây thư mục, giống như cách bạn có thể sử dụng hàm
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
7 để duyệt qua một dãy số. Không giống như
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
7, hàm
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3 sẽ trả về ba giá trị trên mỗi lần lặp qua vòng lặp

  1. Một chuỗi tên thư mục hiện tại

  2. Một danh sách các chuỗi của các thư mục trong thư mục hiện tại

  3. Danh sách các chuỗi tệp trong thư mục hiện tại

(Theo thư mục hiện tại, ý tôi là thư mục dành cho lần lặp hiện tại của vòng lặp

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
6. Thư mục làm việc hiện tại của chương trình không bị thay đổi bởi
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3. )

Giống như bạn có thể chọn tên biến

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
02 trong mã
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
03, bạn cũng có thể chọn tên biến cho ba giá trị được liệt kê trước đó. Tôi thường sử dụng tên
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
04,
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
05, và
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
06

Khi bạn chạy chương trình này, nó sẽ xuất ra như sau

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
0

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3 trả về danh sách các chuỗi cho các biến
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
08 và
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
09, nên bạn có thể sử dụng các danh sách này trong các vòng lặp
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
6 của riêng chúng. Thay thế lệnh gọi hàm
import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        #os.unlink(filename)
        print(filename)
9 bằng mã tùy chỉnh của riêng bạn. (Hoặc nếu bạn không cần một hoặc cả hai, hãy loại bỏ các vòng lặp
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
6. )

Nén tệp bằng Mô-đun zipfile

Bạn có thể quen thuộc với các tệp ZIP (với . zip ), có thể chứa nội dung nén của nhiều tệp khác. Nén tệp làm giảm kích thước của tệp, điều này rất hữu ích khi chuyển tệp qua Internet. Và vì một tệp ZIP cũng có thể chứa nhiều tệp và thư mục con, đây là một cách thuận tiện để đóng gói nhiều tệp thành một. Tệp duy nhất này, được gọi là tệp lưu trữ , sau đó có thể được đính kèm vào một email.

Các chương trình Python của bạn có thể tạo và mở (hoặc giải nén ) tệp ZIP bằng cách sử dụng các hàm trong mô-đun

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
13. Giả sử bạn có tệp ZIP có tên example. zip có nội dung hiển thị trong.

Bạn có thể tải xuống tệp ZIP này từ http. //Không có tinh bột. com/automatestuff/ hoặc chỉ cần làm theo bằng cách sử dụng tệp ZIP đã có trên máy tính của bạn.

Sắp xếp tệp vào các thư mục dựa trên tên tệp Python

Hình 9-2. Nội dung của ví dụ. nén

Đọc tệp ZIP

Để đọc nội dung của tệp ZIP, trước tiên bạn phải tạo một đối tượng

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 (lưu ý các chữ in hoa ZF).
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 objects are conceptually similar to the
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
16 objects you saw returned by the
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
17 function in the previous chapter: They are values through which the program interacts with the file. To create a
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 object, call the
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
19 function, passing it a string of the . zip tên tệp của tệp. Lưu ý rằng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
13 là tên của mô-đun Python và
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
21 là tên của hàm.

Ví dụ: nhập thông tin sau vào trình bao tương tác

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
1

Đối tượng

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 có phương thức
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
23 trả về danh sách các chuỗi cho tất cả các tệp và thư mục có trong tệp ZIP. Các chuỗi này có thể được chuyển đến phương thức
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
24 để trả về một đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
25 về tệp cụ thể đó. Các đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
25 có các thuộc tính riêng của chúng, chẳng hạn như
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
27 và
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
28 theo byte, tương ứng chứa các số nguyên của kích thước tệp gốc và kích thước tệp nén. Trong khi đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 đại diện cho toàn bộ tệp lưu trữ thì đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
25 chứa thông tin hữu ích về tệp đơn lẻ trong kho lưu trữ.

Lệnh tại ❶ tính toán mức độ hiệu quả ví dụ. zip được nén bằng cách chia kích thước tệp gốc cho kích thước tệp nén và in thông tin này bằng cách sử dụng một chuỗi được định dạng bằng _______25_______31.

Giải nén từ tệp ZIP

Phương thức

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
32 cho các đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 trích xuất tất cả các tệp và thư mục từ tệp ZIP vào thư mục làm việc hiện tại

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
2

Sau khi chạy mã này, nội dung của ví dụ. zip sẽ được giải nén thành C. \ . Theo tùy chọn, bạn có thể chuyển tên thư mục tới

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
32 để nó giải nén các tệp vào một thư mục khác với thư mục làm việc hiện tại. Nếu thư mục được chuyển đến phương thức
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
32 không tồn tại, nó sẽ được tạo. Chẳng hạn, nếu bạn thay cuộc gọi tại ❶ bằng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
36, thì mã sẽ trích xuất các tệp từ ví dụ. zip vào một C mới được tạo. thư mục \ngon .

Phương thức

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
37 cho đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 sẽ trích xuất một tệp duy nhất từ ​​tệp ZIP. Tiếp tục ví dụ shell tương tác

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
3

Chuỗi bạn chuyển đến

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
37 phải khớp với một trong các chuỗi trong danh sách được trả về bởi
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
23. Theo tùy chọn, bạn có thể chuyển đối số thứ hai tới
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
37 để trích xuất tệp vào một thư mục khác với thư mục làm việc hiện tại. Nếu đối số thứ hai này là một thư mục chưa tồn tại, Python sẽ tạo thư mục. Giá trị mà
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
37 trả về là đường dẫn tuyệt đối mà tệp được trích xuất

Tạo và thêm vào tệp ZIP

Để tạo các tệp ZIP nén của riêng bạn, bạn phải mở đối tượng

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 ở chế độ ghi bằng cách chuyển
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
44 làm đối số thứ hai. (Điều này tương tự như việc mở tệp văn bản ở chế độ ghi bằng cách chuyển
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
44 tới hàm
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
17. )

Khi bạn truyền một đường dẫn đến phương thức

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
47 của một đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14, Python sẽ nén tệp tại đường dẫn đó và thêm nó vào tệp ZIP. Đối số đầu tiên của phương thức
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
47 là một chuỗi tên tệp cần thêm. Đối số thứ hai là tham số kiểu nén , cho máy tính biết nên sử dụng thuật toán nào để nén tệp; . (Điều này xác định thuật toán nén giảm phát hoạt động tốt trên tất cả các loại dữ liệu. ) Nhập thông tin sau vào trình bao tương tác.

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
4

Mã này sẽ tạo một tệp ZIP mới có tên new. zip chứa nội dung nén của spam. txt .

Hãy nhớ rằng, giống như ghi vào tệp, chế độ ghi sẽ xóa tất cả nội dung hiện có của tệp ZIP. Nếu bạn chỉ muốn thêm các tệp vào một tệp ZIP hiện có, hãy chuyển

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
51 làm đối số thứ hai cho
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
19 để mở tệp ZIP trong chế độ nối thêm .

Dự án. Đổi tên tệp có ngày kiểu Mỹ thành ngày kiểu châu Âu

Giả sử sếp của bạn gửi email cho bạn hàng nghìn tệp có ngày tháng kiểu Mỹ (MM-DD-YYYY) trong tên của chúng và cần đổi tên chúng thành ngày kiểu châu Âu (DD-MM-YYYY). Nhiệm vụ nhàm chán này có thể mất cả ngày để làm bằng tay. Hãy viết một chương trình để làm điều đó thay thế

Đây là những gì chương trình làm

  • Nó tìm kiếm tất cả các tên tệp trong thư mục làm việc hiện tại để tìm ngày kiểu Mỹ

  • Khi một cái được tìm thấy, nó đổi tên tệp với tháng và ngày được hoán đổi để làm cho nó theo phong cách châu Âu

Điều này có nghĩa là mã sẽ cần phải làm như sau

  • Tạo biểu thức chính quy có thể xác định mẫu văn bản của ngày kiểu Mỹ

  • Gọi

    >>> import shutil, os
    >>> os.chdir('C:\\')
    >>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
    'C:\\bacon_backup'
    53 để tìm tất cả các tệp trong thư mục làm việc

  • Lặp lại từng tên tệp, sử dụng biểu thức chính quy để kiểm tra xem nó có ngày không

  • Nếu nó có ngày, hãy đổi tên tệp thành

    >>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
    Traceback (most recent call last):
      File "C:\Python34\lib\shutil.py", line 521, in move
        os.rename(src, real_dst)
    FileNotFoundError: [WinError 3] The system cannot find the path specified:
    'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "<pyshell#29>", line 1, in <module>
        shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
      File "C:\Python34\lib\shutil.py", line 533, in move
        copy2(src, real_dst)
      File "C:\Python34\lib\shutil.py", line 244, in copy2
        copyfile(src, dst, follow_symlinks=follow_symlinks)
      File "C:\Python34\lib\shutil.py", line 108, in copyfile
        with open(dst, 'wb') as fdst:
    FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
    eggs\\ham'
    6

Đối với dự án này, hãy mở cửa sổ trình chỉnh sửa tệp mới và lưu mã của bạn dưới dạng renameDates. p .

Bước 1. Tạo Regex cho Ngày kiểu Mỹ

Phần đầu tiên của chương trình sẽ cần nhập các mô-đun cần thiết và tạo biểu thức chính quy có thể xác định ngày MM-DD-YYYY. Các bình luận việc cần làm sẽ nhắc bạn những gì còn lại để viết trong chương trình này. Nhập chúng dưới dạng

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
55 giúp dễ dàng tìm thấy chúng bằng cách sử dụng tính năng tìm kiếm CTRL -F của IDLE. Làm cho mã của bạn trông giống như sau.

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
5

Từ chương này, bạn đã biết hàm

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
6 có thể được sử dụng để đổi tên tệp. Các đối số của nó là tên của tệp cần đổi tên và tên tệp mới. Vì chức năng này tồn tại trong mô-đun
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3 nên bạn phải nhập mô-đun đó ❶

Nhưng trước khi đổi tên tệp, bạn cần xác định tệp nào bạn muốn đổi tên. Tên tệp có ngày như spam4-4-1984. txt01-03-2014eggs. zip nên được đổi tên, trong khi tên tệp không có ngày tháng chẳng hạn như littlebrother. epub có thể bỏ qua.

Bạn có thể sử dụng một biểu thức chính quy để xác định mẫu này. Sau khi nhập mô-đun

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
58 ở trên cùng, hãy gọi
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
59 để tạo đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
60 ❷. Chuyển
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
61 cho đối số thứ hai ❸ sẽ cho phép khoảng trắng và nhận xét trong chuỗi biểu thức chính quy để làm cho nó dễ đọc hơn

Chuỗi biểu thức chính quy bắt đầu bằng

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
62 để khớp với bất kỳ văn bản nào ở đầu tên tệp có thể xuất hiện trước ngày. Nhóm
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
63 phù hợp với tháng. Chữ số đầu tiên có thể là
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
64 hoặc
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
65, do đó, biểu thức chính quy khớp với
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
66 cho tháng 12 nhưng cũng phù hợp với
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
67 cho tháng 2. Chữ số này cũng là tùy chọn để tháng có thể là
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
68 hoặc
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
69 cho tháng Tư. Nhóm trong ngày là
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
70 và tuân theo logic tương tự; . (Có, biểu thức chính quy này sẽ chấp nhận một số ngày không hợp lệ, chẳng hạn như
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
74,
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
75 và
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
76. Ngày có nhiều trường hợp đặc biệt hóc búa có thể dễ bỏ sót. Nhưng để đơn giản, regex trong chương trình này hoạt động đủ tốt. )

Mặc dù năm 1885 là một năm hợp lệ nhưng bạn chỉ có thể tìm các năm trong thế kỷ 20 hoặc 21. Điều này sẽ giúp chương trình của bạn không vô tình khớp tên tệp không ghi ngày tháng với định dạng giống như ngày tháng, chẳng hạn như 10-10-1000. txt .

Phần

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
77 của biểu thức chính quy sẽ khớp với bất kỳ văn bản nào xuất hiện sau ngày

Bước 2. Xác định các phần ngày từ tên tệp

Tiếp theo, chương trình sẽ phải lặp lại danh sách các chuỗi tên tệp được trả về từ

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
53 và khớp chúng với biểu thức chính quy. Bất kỳ tệp nào không có ngày trong đó nên được bỏ qua. Đối với tên tệp có ngày, văn bản phù hợp sẽ được lưu trữ trong một số biến. Điền vào ba
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
55 đầu tiên trong chương trình của bạn với đoạn mã sau

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
6

Nếu đối tượng

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
80 được trả về từ phương thức
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
81 là
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
82 ❶, thì tên tệp trong
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
83 không khớp với biểu thức chính quy. Câu lệnh
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
84 ❷ sẽ bỏ qua phần còn lại của vòng lặp và chuyển sang tên tệp tiếp theo

Mặt khác, các chuỗi khớp khác nhau trong các nhóm biểu thức chính quy được lưu trữ trong các biến có tên là

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
85,
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
86,
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
87,
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
88 và
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
89 ❸. Các chuỗi trong các biến này sẽ được sử dụng để tạo thành tên tệp kiểu châu Âu trong bước tiếp theo

Để giữ số nhóm thẳng, hãy thử đọc biểu thức chính quy từ đầu và đếm lên mỗi khi bạn gặp dấu ngoặc đơn mở. Không cần suy nghĩ về mã, chỉ cần viết một phác thảo của biểu thức chính quy. Điều này có thể giúp bạn hình dung các nhóm. Ví dụ

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
7

Ở đây, các số

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
65 đến
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
91
đại diện cho . Tạo một phác thảo của biểu thức chính quy, chỉ với các dấu ngoặc đơn và số nhóm, có thể giúp bạn hiểu rõ hơn về biểu thức chính quy của mình trước khi bạn tiếp tục với phần còn lại của chương trình.

Bước 3. Tạo tên tệp mới và đổi tên tệp

Bước cuối cùng, nối các chuỗi trong các biến được thực hiện ở bước trước với ngày kiểu châu Âu. Ngày đến trước tháng. Điền vào ba

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
55 còn lại trong chương trình của bạn với đoạn mã sau

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
8

Lưu trữ chuỗi đã nối trong một biến có tên là

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
93 ❶. Sau đó, chuyển tên tệp ban đầu vào
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
83 và biến
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
93 mới cho hàm
>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
6 để đổi tên tệp ❸

Chương trình này có lệnh gọi

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
6 đã nhận xét và thay vào đó in tên tệp sẽ được đổi tên ❷. Chạy chương trình như thế này trước có thể cho phép bạn kiểm tra kỹ xem các tệp có được đổi tên chính xác không. Sau đó, bạn có thể bỏ ghi chú cuộc gọi
>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  File "C:\Python34\lib\shutil.py", line 521, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 3] The system cannot find the path specified:
'spam.txt' -> 'c:\\does_not_exist\\eggs\\ham'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
  File "C:\Python34\lib\shutil.py", line 533, in move
    copy2(src, real_dst)
  File "C:\Python34\lib\shutil.py", line 244, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python34\lib\shutil.py", line 108, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'
6 và chạy lại chương trình để thực sự đổi tên các tệp

Ý tưởng cho các chương trình tương tự

Có nhiều lý do khác khiến bạn có thể muốn đổi tên một số lượng lớn tệp

  • Để thêm tiền tố vào đầu tên tệp, chẳng hạn như thêm spam_ để đổi tên eggs. txt thành spam_eggs. txt

  • Để thay đổi tên tệp có ngày kiểu Châu Âu thành ngày kiểu Mỹ

  • Để xóa các số 0 khỏi các tệp như spam0042. txt

Dự án. Sao lưu thư mục thành tệp ZIP

Giả sử bạn đang làm việc trên một dự án có các tệp bạn lưu trong thư mục có tên C. \AlsPythonBook . Bạn lo mất công nên muốn tạo file ZIP “ảnh chụp nhanh” toàn bộ thư mục. Bạn muốn giữ các phiên bản khác nhau, vì vậy bạn muốn tên tệp của tệp ZIP tăng lên mỗi khi nó được tạo; . zip AlsPythonBook_1.zip , AlsPythonBook_2. zip , AlsPythonBook_3. zip , v.v. Bạn có thể làm điều này bằng tay, nhưng nó khá phiền phức và bạn có thể vô tình đánh số sai tên của các tệp ZIP. Sẽ đơn giản hơn nhiều nếu chạy một chương trình thực hiện nhiệm vụ nhàm chán này cho bạn.

Đối với dự án này, hãy mở cửa sổ trình chỉnh sửa tệp mới và lưu dưới dạng backupToZip. p .

Bước 1. Tìm hiểu tên của tệp ZIP

Mã cho chương trình này sẽ được đặt trong một hàm có tên là

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
99. Điều này sẽ giúp dễ dàng sao chép và dán chức năng vào các chương trình Python khác cần chức năng này. Kết thúc chương trình sẽ gọi hàm để thực hiện sao lưu. Làm cho chương trình của bạn trông như thế này

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
9

Làm những điều cơ bản đầu tiên. Thêm dòng Shebang (

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
00), mô tả chức năng của chương trình và nhập các mô-đun
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
13 và
import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        os.unlink(filename)
5 ❶

Xác định hàm

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
99 chỉ nhận một tham số,
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
04. Tham số này là một đường dẫn chuỗi đến thư mục có nội dung sẽ được sao lưu. Hàm sẽ xác định tên tệp sẽ sử dụng cho tệp ZIP mà nó sẽ tạo; . Viết
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
55 nhận xét cho các bước này trong mã nguồn để nhắc nhở bản thân thực hiện chúng sau ❹

Phần đầu tiên, đặt tên cho tệp ZIP, sử dụng tên cơ sở của đường dẫn tuyệt đối là

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
04. Nếu thư mục được sao lưu là C. \delicious , tên của tệp ZIP phải là ngon_N. zip , trong đó N = 1 là lần đầu tiên bạn chạy chương trình, N = 2 is the second time, and so on.

Bạn có thể xác định N nên là gì bằng cách kiểm tra xem ngon_1. zip đã tồn tại, sau đó kiểm tra xem ngon_2. zip đã tồn tại, v.v. Sử dụng một biến có tên là

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
08 cho N ❷ và tiếp tục tăng nó bên trong vòng lặp gọi
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
09 để kiểm tra xem tệp có tồn tại hay không ❸. Tên tệp không tồn tại đầu tiên được tìm thấy sẽ khiến vòng lặp thành
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
10, vì nó sẽ tìm thấy tên tệp của zip mới.

Bước 2. Tạo tệp ZIP mới

Tiếp theo, hãy tạo tệp ZIP. Làm cho chương trình của bạn trông giống như sau

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
0

Bây giờ, tên của tệp ZIP mới được lưu trữ trong biến

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
11, bạn có thể gọi
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
19 để thực sự tạo tệp ZIP ❶. Hãy chắc chắn vượt qua
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
44 làm đối số thứ hai để tệp ZIP được mở ở chế độ ghi

Bước 3. Đi bộ trên cây thư mục và thêm vào tệp ZIP

Bây giờ bạn cần sử dụng hàm

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3 để thực hiện công việc liệt kê mọi tệp trong thư mục và các thư mục con của nó. Làm cho chương trình của bạn trông giống như sau

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
1

Bạn có thể sử dụng

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3 trong vòng lặp
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
6 ❶ và trên mỗi lần lặp, nó sẽ trả về tên thư mục hiện tại của lần lặp, các thư mục con trong thư mục đó và tên tệp trong thư mục đó

Trong vòng lặp

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
6, thư mục được thêm vào tệp ZIP ❷. Vòng lặp
import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
6 lồng nhau có thể đi qua từng tên tệp trong danh sách
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
06 ❸. Mỗi tệp trong số này được thêm vào tệp ZIP, ngoại trừ các tệp ZIP dự phòng đã tạo trước đó

Khi bạn chạy chương trình này, nó sẽ tạo ra kết quả trông giống như thế này

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
2

Lần thứ hai bạn chạy nó, nó sẽ đặt tất cả các tệp vào C. \delicious vào tệp ZIP có tên delicious_2. zip , v.v.

Ý tưởng cho các chương trình tương tự

Bạn có thể duyệt cây thư mục và thêm tệp vào kho lưu trữ ZIP đã nén trong một số chương trình khác. Ví dụ: bạn có thể viết các chương trình thực hiện các công việc sau

  • Dọc theo cây thư mục và chỉ lưu trữ các tệp có phần mở rộng nhất định, chẳng hạn như . txt hoặc . py và không gì khác

  • Dọc theo cây thư mục và lưu trữ mọi tệp ngoại trừ . txt. py cái

  • Tìm thư mục trong cây thư mục có số lượng tệp lớn nhất hoặc thư mục sử dụng nhiều dung lượng ổ đĩa nhất

Tóm lược

Ngay cả khi bạn là người dùng máy tính có kinh nghiệm, bạn vẫn có thể xử lý tệp theo cách thủ công bằng chuột và bàn phím. Trình khám phá tệp hiện đại giúp dễ dàng làm việc với một vài tệp. Nhưng đôi khi bạn sẽ cần thực hiện một tác vụ có thể mất hàng giờ bằng cách sử dụng trình duyệt tệp trên máy tính của bạn

Mô-đun

import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        os.unlink(filename)
5 và
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3 cung cấp chức năng sao chép, di chuyển, đổi tên và xóa tệp. Khi xóa tệp, bạn có thể muốn sử dụng mô-đun
>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
4 để di chuyển tệp vào thùng rác hoặc thùng rác thay vì xóa chúng vĩnh viễn. Và khi viết chương trình xử lý tệp, bạn nên nhận xét mã thực hiện sao chép/di chuyển/đổi tên/xóa và thêm lệnh gọi
import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        #os.unlink(filename)
        print(filename)
9 để bạn có thể chạy chương trình và xác minh chính xác nó sẽ làm gì

Thường thì bạn sẽ cần thực hiện các thao tác này không chỉ trên các tệp trong một thư mục mà còn trên mọi thư mục trong thư mục đó, mọi thư mục trong các thư mục đó, v.v. Hàm

import os

for folderName, subfolders, filenames in os.walk('C:\\delicious'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

    print('')
3 xử lý chuyến đi này qua các thư mục cho bạn để bạn có thể tập trung vào những gì chương trình của bạn cần làm với các tệp trong đó

Mô-đun

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
13 cung cấp cho bạn cách nén và giải nén tệp trong . zip lưu trữ thông qua Python. Kết hợp với các chức năng xử lý tệp của
import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        os.unlink(filename)
5 và
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3,
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
13 giúp bạn dễ dàng đóng gói nhiều tệp từ mọi nơi trên ổ cứng của mình. Đây . zip tệp dễ tải lên trang web hoặc gửi dưới dạng tệp đính kèm email hơn nhiều tệp riêng biệt.

Các chương trước của cuốn sách này đã cung cấp mã nguồn để bạn sao chép. Nhưng khi bạn viết các chương trình của riêng mình, chúng có thể sẽ không xuất hiện hoàn hảo ngay lần đầu tiên. Chương tiếp theo tập trung vào một số mô-đun Python sẽ giúp bạn phân tích và gỡ lỗi chương trình của mình để bạn có thể nhanh chóng làm cho chúng hoạt động bình thường

câu hỏi thực hành


Q

1. Sự khác biệt giữa

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
5 và
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'
9 là gì?

Q

2. Chức năng nào được sử dụng để đổi tên tệp?

Q

3. Sự khác biệt giữa các chức năng xóa trong mô-đun

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')
4 và
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
3 là gì?

Q

4. Các đối tượng của

>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 có phương thức
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
34 giống như phương thức của đối tượng
>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
34 của
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
16. Phương thức
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
14 nào tương đương với phương thức
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
17 của đối tượng
>>> import shutil, os
>>> os.chdir('C:\\')
>>> shutil.copytree('C:\\bacon', 'C:\\bacon_backup')
'C:\\bacon_backup'
16?

Dự án thực hành

Để thực hành, hãy viết chương trình để thực hiện các nhiệm vụ sau

Sao chép có chọn lọc

Viết chương trình duyệt qua cây thư mục và tìm kiếm các tệp có phần mở rộng tệp nhất định (chẳng hạn như . pdf hoặc . jpg ). Sao chép các tệp này từ bất kỳ vị trí nào chúng đang ở trong một thư mục mới.

Xóa các tập tin không cần thiết

Không có gì lạ khi một số tệp hoặc thư mục không cần thiết nhưng chiếm phần lớn dung lượng trên ổ cứng của bạn. Nếu bạn đang cố gắng giải phóng dung lượng trên máy tính của mình, bạn sẽ nhận được nhiều tiền nhất bằng cách xóa phần lớn các tệp không mong muốn. Nhưng trước tiên bạn phải tìm thấy chúng

Viết chương trình duyệt qua cây thư mục và tìm kiếm các tệp hoặc thư mục đặc biệt lớn—ví dụ: những tệp hoặc thư mục có kích thước tệp lớn hơn 100MB. (Hãy nhớ rằng, để biết kích thước của tệp, bạn có thể sử dụng

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'
40 từ mô-đun
import os
for filename in os.listdir():
    if filename.endswith('.rxt'):
        os.unlink(filename)
5. ) In các tệp này với đường dẫn tuyệt đối của chúng tới màn hình

Điền vào các khoảng trống

Viết chương trình tìm tất cả các tệp có tiền tố cho trước, chẳng hạn như spam001. txt , spam002. txt , v.v., trong một thư mục và định vị mọi khoảng trống trong cách đánh số (chẳng hạn như nếu có spam001. txtspam003. txt nhưng không có spam002. txt ). Yêu cầu chương trình đổi tên tất cả các tệp sau này để thu hẹp khoảng cách này.

Như một thách thức được thêm vào, hãy viết một chương trình khác có thể chèn các khoảng trống vào các tệp được đánh số để có thể thêm một tệp mới