Thao tác tệp với Python – thao tác tệp trong python

Bạn đang xem : thao tác tệp trong python

Bắt đầu

Python tuyệt vời để tự động hóa việc tạo, xóa tệp và các loại thao tác tệp khác. Hai trong số các gói chính được sử dụng để thực hiện các loại tác vụ này là os shutil . Chúng tôi sẽ đề cập đến một vài điểm nổi bật hữu ích từ mỗi điểm này.


nhập hệ điều hành
cửa khẩu nhập khẩu

Cách lấy và thay đổi thư mục làm việc hiện tại của bạn

Bạn có thể lấy thư mục làm việc hiện tại của mình bằng cách sử dụng os.getcwd:


os.getcwd ()

Bất kỳ hành động nào bạn thực hiện mà không chỉ định thư mục sẽ được coi là được liên kết với thư mục làm việc hiện tại của bạn, tức là nếu bạn tạo hoặc tìm kiếm tệp mà không chỉ định thư mục, Python sẽ cho rằng bạn đang ở trong giá trị của os.getcwd ( ).

Để thay đổi thư mục làm việc của bạn, hãy sử dụng os.chdir:


os.chdir ("C: / path / to / new / directory")

Cách hợp nhất tên thư mục với tên tệp

Gói os chứa một phương pháp hay để kết hợp tên thư mục với tên tệp, như bên dưới:


os.path.join ("C: / path / to / directory", "some_file.txt")

Chạy mã trên sẽ dẫn đến “C: /path/to/directory/some_file.txt”

Chúng tôi sẽ sử dụng chức năng này trong phần tiếp theo của danh sách tất cả các tệp trong một thư mục.

Cách liệt kê tất cả các tệp trong một thư mục

Để liệt kê các tệp trong thư mục trực tiếp của bạn (không nằm trong bất kỳ thư mục con nào trong một thư mục cụ thể), bạn có thể sử dụng os.listdir:


os.listdir ()

Để liệt kê đệ quy tất cả các tệp / thư mục trong một thư mục, chúng ta có thể sử dụng phương thức os.walk:


result_generator = os.walk ("C: / path / to / directory")

files_result = [x for x in result_generator]

os.walk trả về một trình tạo . Sử dụng khả năng hiểu danh sách, chúng ta có thể nhận được những tệp nào được chứa trong thư mục mẹ đầu vào, như chúng ta đã làm ở trên. Danh sách này chứa một tập hợp các bộ, mỗi bộ có độ dài 3. Đối với mỗi bộ, phần tử đầu tiên là một thư mục. Thư mục này có thể là chính thư mục mẹ hoặc một thư mục con được tìm thấy một cách đệ quy trong thư mục mẹ đầu vào.

Phần tử thứ hai của bộ tuple là danh sách các thư mục nằm ngay trong thư mục có tên trong phần tử đầu tiên của bộ tuple. Phần tử thứ ba và cũng là phần tử cuối cùng của bộ tuple, chứa mọi tệp không phải là thư mục ngay trong thư mục có tên trong phần tử đầu tiên của bộ tuple.

Vì vậy, để chỉ lấy danh sách tất cả các tệp và thư mục con bằng cách tìm kiếm đệ quy qua một thư mục (không phải danh sách các bộ dữ liệu, mà là danh sách chỉ tên tệp), chúng ta có thể chạy mã sau (mở rộng từ phía trên):


full_paths = []
cho thư mục, dir_list, file_list trong files_result:
    
    # thêm vào bất kỳ thư mục con nào được tìm thấy một cách đệ quy
    full_paths.extend ([os.path.join (thư mục, phụ) cho phụ trong dir_list])
    
    # thêm vào bất kỳ tệp không phải thư mục nào được tìm thấy một cách đệ quy
    full_paths.extend ([os.path.join (thư mục, tệp) cho tệp trong file_list])

print (full_paths)

Cách tạo thư mục mới

Nếu bạn muốn tạo một số ít thư mục / thư mục, không khó để thực hiện việc này theo cách thủ công. Tuy nhiên, việc tạo vài chục thư mục theo cách thủ công rất nhanh chóng.

Xem Thêm  Cách sử dụng CSS box-shadow: 13 Thủ thuật và Ví dụ - hộp bóng trong ví dụ css

Gói os chứa một phương thức, os.mkdir (tương tự như lệnh mkdir trong Linux hoặc Windows), mà chúng tôi có thể sử dụng trong trường hợp của mình.

Bạn có thể tạo một thư mục như sau:


# tạo thư mục trong thư mục hiện tại
os.mkdir ("this_is_a_new_folder")

# hoặc, tạo thư mục trong thư mục khác
os.mkdir ("C: / path / to / new / directory")

Một vấn đề mà tôi đã gặp vài lần trước đây là tạo một bộ sưu tập các thư mục cho mỗi tiểu bang ở Hoa Kỳ. Chúng tôi có thể thực hiện việc này bằng cách sử dụng gói chúng tôi với os :


from us.states import STATES

'' 'lấy danh sách tất cả các tiểu bang của Hoa Kỳ cộng với DC' ''
all_states = [x.abbr cho x ở STATES]

'' 'tạo thư mục cho từng trạng thái' ''
cho trạng thái trong all_states:
    os.mkdir (trạng thái)

Ở trên, đối tượng STATES từ us.states chứa các thuộc tính về mỗi trạng thái. Chúng tôi nhận được tên viết tắt của tiểu bang bằng cách sử dụng thuộc tính “.abbr” của mỗi phần tử trong STATES.

Nếu chúng tôi muốn tạo danh sách các thư mục có tên trạng thái đầy đủ, thay vì viết tắt, chúng tôi có thể sử dụng thuộc tính “.name”:


all_states = [x.name for x in STATES]

Một vấn đề tương tự là tạo một bộ sưu tập các thư mục cho các chữ cái trong bảng chữ cái. Điều này có thể được sử dụng để sắp xếp các tệp hoặc dữ liệu liên quan đến họ. Ở đây, chúng tôi sẽ sử dụng gói string để lấy các chữ cái trong bảng chữ cái.


nhập chuỗi

'' 'tạo thư mục cho mỗi chữ cái trong bảng chữ cái' ''
cho chữ cái trong string.ascii_uppercase:
    os.mkdir (thư)

Cách xóa tệp / thư mục

Tiếp theo, điều gì sẽ xảy ra nếu bạn muốn xóa tất cả các thư mục và nội dung của chúng trong một thư mục? Bạn có thể thực hiện việc này bằng phương thức os.unlink. Tuy nhiên, hãy cẩn thận vì nội dung của các thư mục sẽ bị mất mà không vào Thùng rác (nếu bạn đang sử dụng Windows).

Nếu bạn gặp phải lỗi “quyền bị từ chối” trên Windows, bạn có thể phải chạy Python với tư cách quản trị viên. Điều này thường có thể được thực hiện bằng cách nhấp chuột phải vào biểu tượng IDE bạn đang sử dụng (hoặc dấu nhắc lệnh nếu bạn đang chạy một tập lệnh từ đó) và nhấp vào “Chạy với tư cách quản trị viên”.


cho thư mục trong os.listdir ("C: / path / to / directory"):
    os.unlink (elt)

Ở trên, chúng tôi đã sử dụng phương thức os.listdir để liệt kê tất cả các tệp / thư mục trong một thư mục.

Hoặc nếu bạn chỉ muốn xóa một tệp, hãy làm như sau:


os.unlink ("C: /path/to/a/file.txt")

Thời gian tạo và sửa đổi

Việc xóa các tệp cũ là một nhiệm vụ tương đối phổ biến. Để thực hiện điều này, trước tiên chúng ta cần biết tuổi của các tệp trong thư mục mà chúng ta muốn xóa.

Điều này có thể được thực hiện bằng cách kiểm tra ngày tạo hoặc ngày sửa đổi của tệp trong thư mục.


thời gian nhập khẩu

'' 'lấy danh sách các tệp / thư mục trong thư mục' ''

content = os.listdir ()

'' 'Lấy dấu thời gian đã tạo của từng tệp / thư mục trong thư mục hiện tại' ''

create_times = [time.ctime (os.path.getctime (elt)) cho nội dung bỏ đi]
create_times = [time.strptime (elt) cho elt trong create_times]

'' 'xóa tất cả các tệp được tạo trước năm 2017' ''
cho chỉ mục trong phạm vi (len (create_times)):

    nếu tạo_lần [chỉ mục] .tm_year & lt; 2017:
        os.unlink (nội dung [chỉ mục])

Hãy chia nhỏ vấn đề này.


create_times = [time.ctime (os.path.getctime (elt)) cho nội dung bỏ đi]

Ở đây, chúng tôi đang sử dụng phương thức os.path.getctime để lấy dấu thời gian đã tạo của từng tệp / thư mục (hoặc “elt”) trong thư mục gốc của thư mục hiện tại.

Xem Thêm  jQuery get phần tử theo id - cách lấy phần tử theo id trong jquery

Chúng tôi đang đưa phương thức này vào bên trong time.ctime để chuyển đổi đối tượng được trả về bởi os.path.getctime thành một chuỗi ngày trông giống như sau:

“Thứ Tư, 4 tháng 8, 20:30:24, 2017”

Điều này được thực hiện vì đối tượng được trả về bởi os.path.getctime là một float, đại diện cho số giây kể từ ngày 1 tháng 1 năm 1970. Để đọc thêm về cách biểu diễn thời gian trong Python, hãy xem tại đây .

Khi chúng tôi có chuỗi dấu thời gian cho mỗi phần tử trong thư mục, chúng tôi chuyển đổi từng chuỗi thành kiểu struct_time, điều này sẽ cho phép chúng tôi dễ dàng phân tích cú pháp thông tin về các ngày đã tạo, ví dụ: năm hoặc tháng các tệp cụ thể đã được tạo.

Bạn có thể thực hiện việc này bằng cách gọi phương thức time.strptime trên mỗi phần tử trong danh sách create_times.


create_times = [time.strptime (elt) cho elt trong create_times]

Cuối cùng, chúng tôi lặp lại các chỉ số trên create_times và xóa tệp / thư mục tương ứng nếu năm được tạo là trước năm 2017. Nói cách khác, nếu phần tử thứ 5 trong create_times có dấu thời gian với năm trước 2017, thì phần tử thứ 5 trong nội dung của thư mục (được lưu trữ trong nội dung biến) sẽ bị xóa.

Bạn có thể lấy năm của loại struct_time bằng cách sử dụng phương thức tm_year:


cho chỉ mục trong phạm vi (len (create_times)):

    if create_times [index] .tm_year! = 2017:
        os.unlink (nội dung [chỉ mục])

Vậy điều gì sẽ xảy ra nếu chúng tôi muốn xóa mọi thứ được sửa đổi lần cuối trước năm 2017, thay vì chỉ tạo?

Chúng tôi có thể thực hiện gần như chính xác cùng một quy trình, ngoại trừ chúng tôi thay đổi os.path.getctime thành os.path.getmtime:


mod_times = [time.ctime (os.path.getmtime (elt)) cho nội dung bỏ đi]
mod_times = [time.strptime (elt) cho elt trong create_times]

cho chỉ mục trong phạm vi (len (mod_times)):

    nếu tạo_lần [chỉ mục] .tm_year & lt; 2017:
        os.unlink (nội dung [chỉ mục])

Cách đổi tên tệp

Đổi tên tệp bằng os.rename:


os.rename ("C: /current/file/name.txt", "C: /new/file/name.txt")

Cách sao chép tệp

Có một số cách để sao chép tệp.

Một phương pháp tiêu chuẩn là sử dụng shutil.copy, như bên dưới:


shutil.copy ("C: /path/to/file.txt", "C: / new / directory")

Đối số đầu tiên là tên của tệp hoặc thư mục bạn muốn sao chép. Tham số thứ hai là điểm đến của nơi bạn muốn đặt bản sao. shutil.copy sẽ sao chép tệp đầu vào cùng với mọi quyền liên quan. Một phương pháp sao chép tệp khác là sử dụng shutil.copy2, như sau:


shutil.copy2 ("C: /path/to/file.txt", "C: / new / directory")

shutil.copy2 cũng sẽ sao chép mọi siêu dữ liệu được liên kết với tệp, cùng với các quyền.

Cách di chuyển tệp sang một thư mục khác

Để di chuyển tệp từ thư mục này sang thư mục khác, bạn có thể sử dụng hàm shutil.move. Để di chuyển một tệp, chúng tôi chạy mã như sau:


shutil.move ("C: /path/to/file.txt", "C: /path/to/new/directory/file.txt")

Tham số đầu tiên là tên của tệp chúng tôi muốn di chuyển, trong khi tham số thứ hai là đường dẫn đầy đủ mới của tệp.

Giả sử chúng tôi muốn di chuyển mọi tệp và thư mục con từ một thư mục đến một điểm đến mới.

Xem Thêm  Tổng hợp các bài tập javascript cơ bản có lời giải mới nhất 2020 - sự kiện onclick trong html

Chúng tôi có thể thực hiện việc này bằng cách sử dụng phương thức shutil.move trong một vòng lặp như sau:

cho tệp trong os.listdir ("C: / path / to / current_location"):
    shutil.move (tệp, "C: / path / to / new / directory /" + tệp)

Cách lấy tên cơ sở của tệp

Bạn có thể lấy tên cơ sở của tệp bằng cách sử dụng os.path.basename:


os.path.basename ("C: /path/to/file.txt")

Ở trên sẽ trả về “file.txt”

Cách lấy tên thư mục của tệp

Tương tự như trên, chúng ta có thể lấy tên thư mục của tệp bằng cách sử dụng os.path.dirname:


os.path.dirname ("C: /path/to/file.txt")

Điều này trả về “C: / path / to”

Vì vậy, đó là phần giới thiệu về cách thao tác tệp với Python! Để xem phần giới thiệu về cách làm việc với các tệp trong R, hãy xem bài đăng này .


Xem thêm những thông tin liên quan đến chủ đề thao tác tệp trong python

Bài 5 – Thao tác với tệp trong ngôn ngữ lập trình Python | VniTeach Channel

  • Tác giả: VniTeach – Giáo viên 4.0
  • Ngày đăng: 2020-12-22
  • Đánh giá: 4 ⭐ ( 4396 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài 5 – Thao tác với tệp trong ngôn ngữ lập trình Python | VniTeach Channel
    thao_tác_tệp thao_tac_tep ngôn_ngữ_python ngon_ngu_python vniteach

    Hãy truy cập địa chỉ để xem các video hướng dẫn về Thủ thuật website, phần mềm: https://www.youtube.com/playlist?list=PLCRwo0vi_AsTWkhXJxPnixLh1fFwYNVeI

    Để động viên đội ngũ cộng tác viên làm việc tại VniTeach, bạn hãy bấm Đăng ký để nhận những video mới và thú vị nhất nhé!

    Ủng hộ cho VniTeach để phát triển kênh tại PAYPAL: https://www.paypal.me/vniteach

    VniTeach
    © Bản quyền thuộc về VniTeach.
    © Copyright by VniTeach Channel | Do not Reup.

Thao tác với file trong Python

  • Tác giả: phannhatchanh.com
  • Đánh giá: 5 ⭐ ( 9166 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chúng ta thường lưu trữ dữ liệu của mình dưới các định dạng file khác nhau như .txt, .json, .xml, .csv, .tsv, .xlsx). Trong phần này, ta sẽ…

Đọc ghi file trong Python

  • Tác giả: nguyenvanhieu.vn
  • Đánh giá: 5 ⭐ ( 3430 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Đọc ghi file trong Python hoặc trong bất kỳ ngôn ngữ nào khác là một thao tác thường xuyên được sử dụng trong quá trình làm việc. Bài viết này sẽ hướng dẫn

Thao tác với File trong Python

  • Tác giả: viblo.asia
  • Đánh giá: 4 ⭐ ( 4563 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

Hướng dẫn các thao tác cơ bản với File trong Python

  • Tác giả: unitrain.edu.vn
  • Đánh giá: 3 ⭐ ( 1906 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xử lý tệp bằng Python – Tìm hiểu và nắm rõ nhanh trong 10 phút

  • Tác giả: t3h.com.vn
  • Đánh giá: 4 ⭐ ( 9107 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tính linh hoạt này, kết hợp với sự dễ sử dụng cho người mới bắt đầu, đã khiến nó trở thành một trong những ngôn ngữ lập trình được sử dụng rộng rãi nhất hiện nay. Trong bài học này, bạn sẽ tìm hiểu tất cả về Xử lý tệp bằng Python.

Xử lý File trong Python

  • Tác giả: laptrinhtudau.com
  • Đánh giá: 4 ⭐ ( 2987 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Xử lý File trong Python – Lập Trình Từ Đầu a Xử lý File Python

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình