Hướng dẫn encoding in python file - mã hóa trong tệp python

Nếu bạn không hài lòng với các công cụ tự động, bạn có thể thử tất cả các codec và xem codec nào đúng theo cách thủ công.

Show

Nội phân Chính showShow

  • Tệp là gì?
  • Kết thúc dòng
  • Mã hóa ký tự
  • Mở và đóng một tập tin trong Python
  • Loại tệp văn bản
  • Các loại tệp nhị phân được đệm
  • Các loại tệp thô
  • Đọc và viết các tệp đã mở
  • Lặp lại trên từng dòng trong tệp
  • Làm việc với byte
  • Một ví dụ đầy đủ: dos2unix.py
  • Các mẹo và thủ thuật
  • Nối vào một tập tin
  • Làm việc với hai tệp cùng một lúc
  • Tạo trình quản lý bối cảnh của riêng bạn
  • Don lồng phát minh lại con rắn
  • Bạn là một pháp sư tập tin Harry!

Nội phân chính

  • Tệp là gì?
  • Kết thúc dòng
  • Mã hóa ký tự
  • Mở và đóng một tập tin trong Python
  • Loại tệp văn bản
  • Các loại tệp nhị phân được đệm
  • Các loại tệp thô
  • Đọc và viết các tệp đã mở
  • Lặp lại trên từng dòng trong tệp
  • Làm việc với byte
  • Một ví dụ đầy đủ: dos2unix.py
  • Các mẹo và thủ thuật
  • Nối vào một tập tin
  • Làm việc với hai tệp cùng một lúc
  • Tạo trình quản lý bối cảnh của riêng bạn
  • Don lồng phát minh lại con rắn
  • Bạn là một pháp sư tập tin Harry!
all_codecs = ['ascii', 'big5', 'big5hkscs', 'cp037', 'cp273', 'cp424', 'cp437', 
'cp500', 'cp720', 'cp737', 'cp775', 'cp850', 'cp852', 'cp855', 'cp856', 'cp857', 
'cp858', 'cp860', 'cp861', 'cp862', 'cp863', 'cp864', 'cp865', 'cp866', 'cp869', 
'cp874', 'cp875', 'cp932', 'cp949', 'cp950', 'cp1006', 'cp1026', 'cp1125', 
'cp1140', 'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255', 'cp1256', 
'cp1257', 'cp1258', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213', 'euc_kr', 
'gb2312', 'gbk', 'gb18030', 'hz', 'iso2022_jp', 'iso2022_jp_1', 'iso2022_jp_2', 
'iso2022_jp_2004', 'iso2022_jp_3', 'iso2022_jp_ext', 'iso2022_kr', 'latin_1', 
'iso8859_2', 'iso8859_3', 'iso8859_4', 'iso8859_5', 'iso8859_6', 'iso8859_7', 
'iso8859_8', 'iso8859_9', 'iso8859_10', 'iso8859_11', 'iso8859_13', 
'iso8859_14', 'iso8859_15', 'iso8859_16', 'johab', 'koi8_r', 'koi8_t', 'koi8_u', 
'kz1048', 'mac_cyrillic', 'mac_greek', 'mac_iceland', 'mac_latin2', 'mac_roman', 
'mac_turkish', 'ptcp154', 'shift_jis', 'shift_jis_2004', 'shift_jisx0213', 
'utf_32', 'utf_32_be', 'utf_32_le', 'utf_16', 'utf_16_be', 'utf_16_le', 'utf_7', 
'utf_8', 'utf_8_sig']

def find_codec(text):
    for i in all_codecs:
        for j in all_codecs:
            try:
                print(i, "to", j, text.encode(i).decode(j))
            except:
                pass

find_codec("The example string which includes ö, ü, or ÄŸ, ö")

Nội phân chính

Kịch bản này tạo ra ít nhất 9409 dòng đầu ra. Vì vậy, nếu đầu ra không thể phù hợp với màn hình đầu cuối, hãy cố gắng ghi đầu ra vào tệp văn bản. This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Reading and Writing Files in Python

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Đọc và ghi các tập tin bằng Python

Một trong những nhiệm vụ phổ biến nhất mà bạn có thể làm với Python là đọc và viết tệp. Cho dù nó viết vào một tệp văn bản đơn giản, đọc nhật ký máy chủ phức tạp hoặc thậm chí phân tích dữ liệu byte thô, tất cả các tình huống này đều yêu cầu đọc hoặc viết một tệp.

  • Trong hướng dẫn này, bạn sẽ học:
  • Điều gì tạo nên một tập tin và tại sao điều đó quan trọng trong Python
  • Những điều cơ bản của việc đọc và ghi các tập tin trong Python

Một số kịch bản cơ bản về đọc và ghi tệp

Tệp là gì?

Hướng dẫn này chủ yếu dành cho người mới bắt đầu đến trung gian Pythonistas, nhưng có một số lời khuyên ở đây mà các lập trình viên tiên tiến hơn cũng có thể đánh giá cao.

Trước khi chúng ta có thể đi vào cách làm việc với các tệp trong Python, điều quan trọng là phải hiểu chính xác một tệp là gì và cách các hệ điều hành hiện đại xử lý một số khía cạnh của chúng.

Tại cốt lõi của nó, một tệp là một tập hợp các byte tiếp giáp được sử dụng để lưu trữ dữ liệu. Dữ liệu này được tổ chức theo một định dạng cụ thể và có thể đơn giản như tệp văn bản hoặc phức tạp như một chương trình có thể thực thi. Cuối cùng, các tệp byte này sau đó được dịch thành nhị phân

/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
6 và
/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
7 để xử lý dễ dàng hơn bởi máy tính.

  1. Các tệp trên hầu hết các hệ thống tệp hiện đại bao gồm ba phần chính: metadata about the contents of the file (file name, size, type, and so on)
  2. Tiêu đề: Siêu dữ liệu về nội dung của tệp (tên tệp, kích thước, loại, v.v.) contents of the file as written by the creator or editor
  3. Dữ liệu: Nội dung của tệp được viết bởi người tạo hoặc trình chỉnh sửa special character that indicates the end of the file

Hướng dẫn encoding in python file - mã hóa trong tệp python

Kết thúc tệp (EOF): ký tự đặc biệt cho biết phần cuối của tệp

Những gì dữ liệu này thể hiện phụ thuộc vào đặc tả định dạng được sử dụng, thường được biểu thị bằng một phần mở rộng. Ví dụ: một tệp có phần mở rộng / │ ├── path/ ← Referencing this parent folder | │ | ├── to/ ← Current working directory (cwd) | │ └── cats.gif | │ | └── dog_breeds.txt ← Accessing this file | └── animals.csv 8 rất có thể phù hợp với đặc tả định dạng trao đổi đồ họa. Có hàng trăm, nếu không phải hàng ngàn phần mở rộng tệp ngoài kia. Đối với hướng dẫn này, bạn sẽ chỉ xử lý các phần mở rộng tệp / │ ├── path/ ← Referencing this parent folder | │ | ├── to/ ← Current working directory (cwd) | │ └── cats.gif | │ | └── dog_breeds.txt ← Accessing this file | └── animals.csv 9 hoặc Pug\r\n Jack Russell Terrier\r\n English Springer Spaniel\r\n German Shepherd\r\n Staffordshire Bull Terrier\r\n Cavalier King Charles Spaniel\r\n Golden Retriever\r\n West Highland White Terrier\r\n Boxer\r\n Border Terrier\r\n 0.

Đường dẫn tập tin

  1. Khi bạn truy cập một tệp trên một hệ điều hành, một đường dẫn tệp được yêu cầu. Đường dẫn tệp là một chuỗi đại diện cho vị trí của một tệp. Nó chia thành ba phần chính: the file folder location on the file system where subsequent folders are separated by a forward slash
    Pug\r\n
    Jack Russell Terrier\r\n
    English Springer Spaniel\r\n
    German Shepherd\r\n
    Staffordshire Bull Terrier\r\n
    Cavalier King Charles Spaniel\r\n
    Golden Retriever\r\n
    West Highland White Terrier\r\n
    Boxer\r\n
    Border Terrier\r\n
    
    1 (Unix) or backslash
    Pug\r\n
    Jack Russell Terrier\r\n
    English Springer Spaniel\r\n
    German Shepherd\r\n
    Staffordshire Bull Terrier\r\n
    Cavalier King Charles Spaniel\r\n
    Golden Retriever\r\n
    West Highland White Terrier\r\n
    Boxer\r\n
    Border Terrier\r\n
    
    2 (Windows)
  2. Đường dẫn thư mục: Vị trí thư mục tệp trên hệ thống tệp nơi các thư mục tiếp theo được phân tách bằng dấu gạch chéo phía trước
    Pug\r\n
    Jack Russell Terrier\r\n
    English Springer Spaniel\r\n
    German Shepherd\r\n
    Staffordshire Bull Terrier\r\n
    Cavalier King Charles Spaniel\r\n
    Golden Retriever\r\n
    West Highland White Terrier\r\n
    Boxer\r\n
    Border Terrier\r\n
    
    1 (UNIX) hoặc Backslash
    Pug\r\n
    Jack Russell Terrier\r\n
    English Springer Spaniel\r\n
    German Shepherd\r\n
    Staffordshire Bull Terrier\r\n
    Cavalier King Charles Spaniel\r\n
    Golden Retriever\r\n
    West Highland White Terrier\r\n
    Boxer\r\n
    Border Terrier\r\n
    
    2 (Windows)
    the actual name of the file
  3. Tên tệp: Tên thực của tệp the end of the file path pre-pended with a period (
    Pug\r\n
    Jack Russell Terrier\r\n
    English Springer Spaniel\r\n
    German Shepherd\r\n
    Staffordshire Bull Terrier\r\n
    Cavalier King Charles Spaniel\r\n
    Golden Retriever\r\n
    West Highland White Terrier\r\n
    Boxer\r\n
    Border Terrier\r\n
    
    3) used to indicate the file type

Tiện ích mở rộng: Phần cuối của đường dẫn tệp được ưu tiên với một khoảng thời gian (

Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
3) được sử dụng để chỉ ra loại tệp

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv

Ở đây, một ví dụ nhanh chóng. Hãy nói rằng bạn có một tệp nằm trong cấu trúc tệp như thế này:

Hãy nói rằng bạn muốn truy cập vào tệp

Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
4 và vị trí hiện tại của bạn nằm trong cùng thư mục với
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
5. Để truy cập tệp, bạn cần đi qua thư mục
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
5 và sau đó là thư mục
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
7, cuối cùng đến tệp
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
4. Đường dẫn thư mục là
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
9. Tên tệp là
Pug\r
\n
Jack Russell Terrier\r
\n
English Springer Spaniel\r
\n
German Shepherd\r
\n
Staffordshire Bull Terrier\r
\n
Cavalier King Charles Spaniel\r
\n
Golden Retriever\r
\n
West Highland White Terrier\r
\n
Boxer\r
\n
Border Terrier\r
\n
0. Phần mở rộng tệp là
/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
8. Vì vậy, đường dẫn đầy đủ là
Pug\r
\n
Jack Russell Terrier\r
\n
English Springer Spaniel\r
\n
German Shepherd\r
\n
Staffordshire Bull Terrier\r
\n
Cavalier King Charles Spaniel\r
\n
Golden Retriever\r
\n
West Highland White Terrier\r
\n
Boxer\r
\n
Border Terrier\r
\n
2.

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv

Bây giờ, hãy để nói rằng vị trí hiện tại hoặc thư mục làm việc hiện tại của bạn (CWD) nằm trong thư mục

Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
7 của cấu trúc thư mục ví dụ của chúng tôi. Thay vì đề cập đến
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
4 theo đường dẫn đầy đủ của
Pug\r
\n
Jack Russell Terrier\r
\n
English Springer Spaniel\r
\n
German Shepherd\r
\n
Staffordshire Bull Terrier\r
\n
Cavalier King Charles Spaniel\r
\n
Golden Retriever\r
\n
West Highland White Terrier\r
\n
Boxer\r
\n
Border Terrier\r
\n
2, tệp có thể được tham chiếu đơn giản bằng tên tệp và tiện ích mở rộng
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
4.

/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv

DOT đôi (

Pug\r
\n
Jack Russell Terrier\r
\n
English Springer Spaniel\r
\n
German Shepherd\r
\n
Staffordshire Bull Terrier\r
\n
Cavalier King Charles Spaniel\r
\n
Golden Retriever\r
\n
West Highland White Terrier\r
\n
Boxer\r
\n
Border Terrier\r
\n
8) có thể được xích lại với nhau để vượt qua nhiều thư mục trên thư mục hiện tại. Ví dụ: để truy cập
file = open('dog_breeds.txt')
3 từ thư mục
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
7, bạn sẽ sử dụng
file = open('dog_breeds.txt')
5.

Kết thúc dòng

Một vấn đề thường gặp phải khi làm việc với dữ liệu tệp là biểu diễn của một dòng mới hoặc kết thúc dòng. Kết thúc dòng có nguồn gốc từ trở lại trong kỷ nguyên mã Morse, khi một ký hiệu ủng hộ cụ thể được sử dụng để truyền đạt sự kết thúc của việc truyền hoặc kết thúc của một dòng.

Sau đó, điều này đã được tiêu chuẩn hóa cho các nhà giao dịch từ xa bởi cả Tổ chức Tiêu chuẩn hóa Quốc tế (ISO) và Hiệp hội Tiêu chuẩn Hoa Kỳ (ASA). ASA tiêu chuẩn nói rằng các kết thúc dòng nên sử dụng trình tự trả lại vận chuyển (

file = open('dog_breeds.txt')
6 hoặc
file = open('dog_breeds.txt')
7) và các ký tự nguồn cấp dữ liệu dòng (
file = open('dog_breeds.txt')
8 hoặc
file = open('dog_breeds.txt')
9) (
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
0 hoặc
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
1). Tuy nhiên, tiêu chuẩn ISO cho phép các ký tự
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
0 hoặc chỉ là ký tự
file = open('dog_breeds.txt')
8.

Windows sử dụng các ký tự

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
0 để chỉ ra một dòng mới, trong khi các phiên bản UNIX và MAC mới hơn chỉ sử dụng ký tự
file = open('dog_breeds.txt')
8. Điều này có thể gây ra một số biến chứng khi bạn xử lý các tệp trên một hệ điều hành khác với nguồn tệp. Ở đây, một ví dụ nhanh chóng. Hãy nói rằng chúng tôi kiểm tra tệp
Pug\r
\n
Jack Russell Terrier\r
\n
English Springer Spaniel\r
\n
German Shepherd\r
\n
Staffordshire Bull Terrier\r
\n
Cavalier King Charles Spaniel\r
\n
Golden Retriever\r
\n
West Highland White Terrier\r
\n
Boxer\r
\n
Border Terrier\r
\n
7 được tạo trên hệ thống Windows:

Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n

Đầu ra tương tự này sẽ được giải thích trên một thiết bị UNIX khác nhau:

Pug\r
\n
Jack Russell Terrier\r
\n
English Springer Spaniel\r
\n
German Shepherd\r
\n
Staffordshire Bull Terrier\r
\n
Cavalier King Charles Spaniel\r
\n
Golden Retriever\r
\n
West Highland White Terrier\r
\n
Boxer\r
\n
Border Terrier\r
\n

Điều này có thể làm cho việc lặp lại trên mỗi dòng có vấn đề và bạn có thể cần phải tính đến các tình huống như thế này.

Mã hóa ký tự

Một vấn đề phổ biến khác mà bạn có thể gặp phải là mã hóa dữ liệu byte. Một mã hóa là một bản dịch từ dữ liệu byte sang các ký tự có thể đọc được của con người. Điều này thường được thực hiện bằng cách gán một giá trị số để thể hiện một ký tự. Hai mã hóa phổ biến nhất là các định dạng ASCII và Unicode. ASCII chỉ có thể lưu trữ 128 ký tự, trong khi Unicode có thể chứa tới 1.114.112 ký tự.

ASCII thực sự là một tập hợp con của Unicode (UTF-8), có nghĩa là ASCII và Unicode có chung số lượng với các giá trị ký tự. Điều quan trọng cần lưu ý là việc phân tích một tệp có mã hóa ký tự không chính xác có thể dẫn đến lỗi hoặc trình bày sai về ký tự. Ví dụ: nếu một tệp được tạo bằng mã hóa UTF-8 và bạn cố gắng phân tích nó bằng mã hóa ASCII, nếu có một ký tự nằm ngoài 128 giá trị đó, thì sẽ bị lỗi.

Mở và đóng một tập tin trong Python

Khi bạn muốn làm việc với một tệp, điều đầu tiên cần làm là mở nó. Điều này được thực hiện bằng cách gọi chức năng tích hợp

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 có một đối số bắt buộc duy nhất là đường dẫn đến tệp.
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 có một lần trả về duy nhất, đối tượng tệp:

file = open('dog_breeds.txt')

Sau khi bạn mở một tập tin, điều tiếp theo để học là làm thế nào để đóng nó.

Điều quan trọng cần nhớ là nó có trách nhiệm đóng tệp. Trong hầu hết các trường hợp, khi chấm dứt ứng dụng hoặc tập lệnh, cuối cùng một tệp sẽ được đóng. Tuy nhiên, không có gì đảm bảo khi chính xác điều đó sẽ xảy ra. Điều này có thể dẫn đến hành vi không mong muốn bao gồm rò rỉ tài nguyên. Nó cũng là một thực tiễn tốt nhất trong Python (Pythonic) để đảm bảo rằng mã của bạn hoạt động theo cách được xác định rõ và giảm bất kỳ hành vi không mong muốn nào.

Khi bạn điều khiển một tệp, có hai cách bạn có thể sử dụng để đảm bảo rằng một tệp được đóng đúng, ngay cả khi gặp lỗi. Cách đầu tiên để đóng tệp là sử dụng khối

with open('dog_breeds.txt') as reader:
    # Further file processing goes here
0:

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()

Nếu bạn không quen thuộc với khối

with open('dog_breeds.txt') as reader:
    # Further file processing goes here
0 là gì, hãy xem các ngoại lệ của Python: Giới thiệu.

Cách thứ hai để đóng tệp là sử dụng câu lệnh

with open('dog_breeds.txt') as reader:
    # Further file processing goes here
2:

with open('dog_breeds.txt') as reader:
    # Further file processing goes here

Câu lệnh

with open('dog_breeds.txt') as reader:
    # Further file processing goes here
2 tự động chăm sóc việc đóng tệp một khi nó rời khỏi khối
with open('dog_breeds.txt') as reader:
    # Further file processing goes here
2, ngay cả trong trường hợp lỗi. Tôi thực sự khuyên bạn nên sử dụng câu lệnh
with open('dog_breeds.txt') as reader:
    # Further file processing goes here
2 càng nhiều càng tốt, vì nó cho phép mã sạch hơn và giúp xử lý mọi lỗi bất ngờ dễ dàng hơn cho bạn.

Nhiều khả năng, bạn cũng sẽ muốn sử dụng đối số vị trí thứ hai,

with open('dog_breeds.txt') as reader:
    # Further file processing goes here
6. Đối số này là một chuỗi chứa nhiều ký tự để thể hiện cách bạn muốn mở tệp. Mặc định và phổ biến nhất là
with open('dog_breeds.txt') as reader:
    # Further file processing goes here
7, đại diện cho việc mở tệp ở chế độ chỉ đọc dưới dạng tệp văn bản:

with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here

Các tùy chọn khác cho các chế độ được ghi lại đầy đủ trực tuyến, nhưng các tùy chọn được sử dụng phổ biến nhất là:

Tính cáchNghĩa
with open('dog_breeds.txt') as reader:
    # Further file processing goes here
7
Mở để đọc (mặc định)
with open('dog_breeds.txt') as reader:
    # Further file processing goes here
9
Mở để viết, cắt ngắn (ghi đè) tệp trước
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
0 hoặc
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
1
Mở ở chế độ nhị phân (đọc/ghi bằng dữ liệu byte)

Hãy để Lừa quay lại và nói một chút về các đối tượng tệp. Một đối tượng tệp là:

Một đối tượng hiển thị API định hướng tệp (với các phương thức như

with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
2 hoặc
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
3) với tài nguyên cơ bản. (Nguồn)

Có ba loại đối tượng tệp khác nhau:

  • Tệp văn bản
  • Các tập tin nhị phân đệm
  • Tập tin nhị phân thô

Mỗi loại tệp này được xác định trong mô -đun

with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
4. Ở đây, một bản tóm tắt nhanh chóng về cách mọi thứ xếp hàng.

Loại tệp văn bản

Tệp văn bản là tệp phổ biến nhất mà bạn sẽ gặp. Dưới đây là một số ví dụ về cách các tệp này được mở:

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
0

Với các loại tệp này,

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 sẽ trả về đối tượng tệp
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
6:

>>>

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
1

Đây là đối tượng tệp mặc định được trả về bởi

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.

Các loại tệp nhị phân được đệm

Một loại tệp nhị phân được đệm được sử dụng để đọc và viết các tệp nhị phân. Dưới đây là một số ví dụ về cách các tệp này được mở:

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
2

Với các loại tệp này,

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 sẽ trả về đối tượng tệp
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
9 hoặc
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
00:

>>>

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
3

Đây là đối tượng tệp mặc định được trả về bởi reader = open('dog_breeds.txt') try: # Further file processing goes here finally: reader.close() 7.

Các loại tệp nhị phân được đệm

Một loại tệp nhị phân được đệm được sử dụng để đọc và viết các tệp nhị phân. Dưới đây là một số ví dụ về cách các tệp này được mở:

Với các loại tệp này,

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 sẽ trả về đối tượng tệp
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
9 hoặc
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
00:

Các loại tệp thô

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
4

Một loại tệp thô là:

>>>

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
5

Đây là đối tượng tệp mặc định được trả về bởi reader = open('dog_breeds.txt') try: # Further file processing goes here finally: reader.close() 7.

Các loại tệp nhị phân được đệm

Một loại tệp nhị phân được đệm được sử dụng để đọc và viết các tệp nhị phân. Dưới đây là một số ví dụ về cách các tệp này được mở:Với các loại tệp này,
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 sẽ trả về đối tượng tệp
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
9 hoặc
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
00:
Các loại tệp thôMột loại tệp thô là:
Nói chung, được sử dụng như một khối xây dựng cấp thấp cho các luồng nhị phân và văn bản. (Nguồn)Do đó, nó thường không được sử dụng.
Ở đây, một ví dụ về cách các tệp này được mở:Với các loại tệp này,
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 sẽ trả về đối tượng tệp
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
02:

Đọc và viết các tệp đã mở

>>>

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
6

Đây là đối tượng tệp mặc định được trả về bởi

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.

>>>

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
7

Đây là đối tượng tệp mặc định được trả về bởi

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.

>>>

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
8

Đây là đối tượng tệp mặc định được trả về bởi

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.

>>>

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
9

Đây là đối tượng tệp mặc định được trả về bởi reader = open('dog_breeds.txt') try: # Further file processing goes here finally: reader.close() 7.

Các loại tệp nhị phân được đệm

>>>

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
0

Đây là đối tượng tệp mặc định được trả về bởi

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.

>>>

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
1

Đây là đối tượng tệp mặc định được trả về bởi

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.

>>>

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
2

Đây là đối tượng tệp mặc định được trả về bởi

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.

Các loại tệp nhị phân được đệm

Một loại tệp nhị phân được đệm được sử dụng để đọc và viết các tệp nhị phân. Dưới đây là một số ví dụ về cách các tệp này được mở:Với các loại tệp này,
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 sẽ trả về đối tượng tệp
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
9 hoặc
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
00:
Các loại tệp thôMột loại tệp thô là:
Nói chung, được sử dụng như một khối xây dựng cấp thấp cho các luồng nhị phân và văn bản. (Nguồn)Do đó, nó thường không được sử dụng.

Ở đây, một ví dụ về cách các tệp này được mở:

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
3

Với các loại tệp này, reader = open('dog_breeds.txt') try: # Further file processing goes here finally: reader.close() 7 sẽ trả về đối tượng tệp / │ ├── path/ | │ │ ├── to/ │ │ └── cats.gif │ │ │ └── dog_breeds.txt | └── animals.csv 02:

Đọc và viết các tệp đã mở

>>>

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
4

Đây là đối tượng tệp mặc định được trả về bởi

reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7.

Các loại tệp nhị phân được đệm

Một loại tệp nhị phân được đệm được sử dụng để đọc và viết các tệp nhị phân. Dưới đây là một số ví dụ về cách các tệp này được mở:

Với các loại tệp này,
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 sẽ trả về đối tượng tệp
with open('dog_breeds.txt', 'r') as reader:
    # Further file processing goes here
9 hoặc
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
00:
Các loại tệp thô
Một loại tệp thô là:Nói chung, được sử dụng như một khối xây dựng cấp thấp cho các luồng nhị phân và văn bản. (Nguồn)
Do đó, nó thường không được sử dụng.Ở đây, một ví dụ về cách các tệp này được mở:
Với các loại tệp này,
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
7 sẽ trả về đối tượng tệp
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
02:
Đọc và viết các tệp đã mở
Khi bạn đã mở một tệp, bạn sẽ muốn đọc hoặc ghi vào tệp. Trước hết, hãy để che phủ đọc một tập tin. Có nhiều phương thức có thể được gọi trên đối tượng tệp để giúp bạn:Phương pháp
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
37
Một dòng kiểu UNIX kết thúc
file = open('dog_breeds.txt')
9

Chắc chắn, khi bạn mở tệp và đọc các byte này một cách riêng lẻ, bạn có thể thấy rằng đây thực sự là một tệp tiêu đề

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
29:

>>>

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
5

Một ví dụ đầy đủ: dos2unix.py

Hãy để Lừa mang toàn bộ điều này về nhà và xem xét một ví dụ đầy đủ về cách đọc và ghi vào một tập tin. Sau đây là công cụ giống như

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
40 sẽ chuyển đổi một tệp chứa các kết thúc dòng của
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
1 thành
file = open('dog_breeds.txt')
9.

Công cụ này được chia thành ba phần chính. Đầu tiên là

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
43, chuyển đổi một chuỗi từ các kết thúc dòng
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
1 thành
file = open('dog_breeds.txt')
9. Thứ hai là
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
46, chuyển đổi một chuỗi chứa
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
1 ký tự thành
file = open('dog_breeds.txt')
9.
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
46 gọi
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
43 trong nội bộ. Cuối cùng, có khối
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
51, chỉ được gọi là khi tệp được thực thi dưới dạng tập lệnh. Hãy nghĩ về nó như là hàm
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
52 được tìm thấy trong các ngôn ngữ lập trình khác.

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
6

Các mẹo và thủ thuật

Bây giờ bạn đã thành thạo những điều cơ bản về đọc và viết các tập tin, đây là một số mẹo và thủ thuật để giúp bạn phát triển kỹ năng của mình.

/ │ ├── path/ | │ │ ├── to/ │ │ └── cats.gif │ │ │ └── dog_breeds.txt | └── animals.csv 53

Thuộc tính

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
53 là một thuộc tính đặc biệt của các mô -đun, tương tự như
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
55. Nó là:

Tên đường dẫn của tệp mà mô -đun được tải, nếu nó được tải từ một tệp. (Nguồn

Ở đây, một ví dụ thế giới thực. Trong một trong những công việc trước đây của tôi, tôi đã thực hiện nhiều bài kiểm tra cho một thiết bị phần cứng. Mỗi bài kiểm tra được viết bằng tập lệnh Python với tên tệp tập lệnh thử nghiệm được sử dụng làm tiêu đề. Các tập lệnh này sau đó sẽ được thực thi và có thể in trạng thái của chúng bằng thuộc tính đặc biệt

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
53. Ở đây, một cấu trúc thư mục ví dụ:

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
7

Chạy

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
57 Sản xuất như sau:

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
8

Tôi đã có thể chạy và nhận trạng thái của tất cả các bài kiểm tra của mình một cách linh hoạt thông qua việc sử dụng thuộc tính đặc biệt của

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
53.

Nối vào một tập tin

Đôi khi, bạn có thể muốn nối vào một tệp hoặc bắt đầu viết ở cuối tệp đã có. Điều này dễ dàng được thực hiện bằng cách sử dụng ký tự

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
59 cho đối số
with open('dog_breeds.txt') as reader:
    # Further file processing goes here
6:

/
│
├── path/
|   │
|   ├── to/  ← Your current working directory (cwd) is here
|   │   └── cats.gif  ← Accessing this file
|   │
|   └── dog_breeds.txt
|
└── animals.csv
9

Khi bạn kiểm tra lại

Pug\r
\n
Jack Russell Terrier\r
\n
English Springer Spaniel\r
\n
German Shepherd\r
\n
Staffordshire Bull Terrier\r
\n
Cavalier King Charles Spaniel\r
\n
Golden Retriever\r
\n
West Highland White Terrier\r
\n
Boxer\r
\n
Border Terrier\r
\n
7, bạn sẽ thấy rằng phần đầu của tệp không thay đổi và
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
62 hiện được thêm vào cuối tệp:

>>>

/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
0

Một ví dụ đầy đủ: dos2unix.py

Hãy để Lừa mang toàn bộ điều này về nhà và xem xét một ví dụ đầy đủ về cách đọc và ghi vào một tập tin. Sau đây là công cụ giống như

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
40 sẽ chuyển đổi một tệp chứa các kết thúc dòng của
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
1 thành
file = open('dog_breeds.txt')
9.

/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
1

Công cụ này được chia thành ba phần chính. Đầu tiên là / │ ├── path/ | │ │ ├── to/ │ │ └── cats.gif │ │ │ └── dog_breeds.txt | └── animals.csv 43, chuyển đổi một chuỗi từ các kết thúc dòng reader = open('dog_breeds.txt') try: # Further file processing goes here finally: reader.close() 1 thành file = open('dog_breeds.txt') 9. Thứ hai là / │ ├── path/ | │ │ ├── to/ │ │ └── cats.gif │ │ │ └── dog_breeds.txt | └── animals.csv 46, chuyển đổi một chuỗi chứa reader = open('dog_breeds.txt') try: # Further file processing goes here finally: reader.close() 1 ký tự thành file = open('dog_breeds.txt') 9. / │ ├── path/ | │ │ ├── to/ │ │ └── cats.gif │ │ │ └── dog_breeds.txt | └── animals.csv 46 gọi / │ ├── path/ | │ │ ├── to/ │ │ └── cats.gif │ │ │ └── dog_breeds.txt | └── animals.csv 43 trong nội bộ. Cuối cùng, có khối / │ ├── path/ | │ │ ├── to/ │ │ └── cats.gif │ │ │ └── dog_breeds.txt | └── animals.csv 51, chỉ được gọi là khi tệp được thực thi dưới dạng tập lệnh. Hãy nghĩ về nó như là hàm / │ ├── path/ | │ │ ├── to/ │ │ └── cats.gif │ │ │ └── dog_breeds.txt | └── animals.csv 52 được tìm thấy trong các ngôn ngữ lập trình khác.

Các mẹo và thủ thuật

Bây giờ bạn đã thành thạo những điều cơ bản về đọc và viết các tập tin, đây là một số mẹo và thủ thuật để giúp bạn phát triển kỹ năng của mình.

Thuộc tính

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
53 là một thuộc tính đặc biệt của các mô -đun, tương tự như
/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
55. Nó là:

/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
2

Tên đường dẫn của tệp mà mô -đun được tải, nếu nó được tải từ một tệp. (Nguồn

/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
3

Ở đây, một ví dụ thế giới thực. Trong một trong những công việc trước đây của tôi, tôi đã thực hiện nhiều bài kiểm tra cho một thiết bị phần cứng. Mỗi bài kiểm tra được viết bằng tập lệnh Python với tên tệp tập lệnh thử nghiệm được sử dụng làm tiêu đề. Các tập lệnh này sau đó sẽ được thực thi và có thể in trạng thái của chúng bằng thuộc tính đặc biệt

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
53. Ở đây, một cấu trúc thư mục ví dụ:

/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
4

Chạy

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
57 Sản xuất như sau:

>>>

/
│
├── path/  ← Referencing this parent folder
|   │
|   ├── to/  ← Current working directory (cwd)
|   │   └── cats.gif
|   │
|   └── dog_breeds.txt  ← Accessing this file
|
└── animals.csv
5

Một ví dụ đầy đủ: dos2unix.py

Hãy để Lừa mang toàn bộ điều này về nhà và xem xét một ví dụ đầy đủ về cách đọc và ghi vào một tập tin. Sau đây là công cụ giống như

/
│
├── path/
|   │
│   ├── to/
│   │   └── cats.gif
│   │
│   └── dog_breeds.txt
|
└── animals.csv
40 sẽ chuyển đổi một tệp chứa các kết thúc dòng của
reader = open('dog_breeds.txt')
try:
    # Further file processing goes here
finally:
    reader.close()
1 thành
file = open('dog_breeds.txt')
9.

  • Công cụ này được chia thành ba phần chính. Đầu tiên là
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    43, chuyển đổi một chuỗi từ các kết thúc dòng
    reader = open('dog_breeds.txt')
    try:
        # Further file processing goes here
    finally:
        reader.close()
    
    1 thành
    file = open('dog_breeds.txt')
    
    9. Thứ hai là
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    46, chuyển đổi một chuỗi chứa
    reader = open('dog_breeds.txt')
    try:
        # Further file processing goes here
    finally:
        reader.close()
    
    1 ký tự thành
    file = open('dog_breeds.txt')
    
    9.
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    46 gọi
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    43 trong nội bộ. Cuối cùng, có khối
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    51, chỉ được gọi là khi tệp được thực thi dưới dạng tập lệnh. Hãy nghĩ về nó như là hàm
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    52 được tìm thấy trong các ngôn ngữ lập trình khác.
  • Các mẹo và thủ thuật

Bây giờ bạn đã thành thạo những điều cơ bản về đọc và viết các tập tin, đây là một số mẹo và thủ thuật để giúp bạn phát triển kỹ năng của mình.

  • Thuộc tính
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    53 là một thuộc tính đặc biệt của các mô -đun, tương tự như
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    55. Nó là:
    : read and write WAV files (audio)
  • Tên đường dẫn của tệp mà mô -đun được tải, nếu nó được tải từ một tệp. (Nguồn: read and write AIFF and AIFC files (audio)
  • Ở đây, một ví dụ thế giới thực. Trong một trong những công việc trước đây của tôi, tôi đã thực hiện nhiều bài kiểm tra cho một thiết bị phần cứng. Mỗi bài kiểm tra được viết bằng tập lệnh Python với tên tệp tập lệnh thử nghiệm được sử dụng làm tiêu đề. Các tập lệnh này sau đó sẽ được thực thi và có thể in trạng thái của chúng bằng thuộc tính đặc biệt
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    53. Ở đây, một cấu trúc thư mục ví dụ:
    : read and write Sun AU files
  • Chạy
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    57 Sản xuất như sau:
    : read and write tar archive files
  • Tôi đã có thể chạy và nhận trạng thái của tất cả các bài kiểm tra của mình một cách linh hoạt thông qua việc sử dụng thuộc tính đặc biệt của
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    53.
    : work with ZIP archives
  • Nối vào một tập tin: easily create and parse configuration files
  • Đôi khi, bạn có thể muốn nối vào một tệp hoặc bắt đầu viết ở cuối tệp đã có. Điều này dễ dàng được thực hiện bằng cách sử dụng ký tự
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    59 cho đối số
    with open('dog_breeds.txt') as reader:
        # Further file processing goes here
    
    6:
    : create or read XML based files
  • Khi bạn kiểm tra lại
    Pug\r
    \n
    Jack Russell Terrier\r
    \n
    English Springer Spaniel\r
    \n
    German Shepherd\r
    \n
    Staffordshire Bull Terrier\r
    \n
    Cavalier King Charles Spaniel\r
    \n
    Golden Retriever\r
    \n
    West Highland White Terrier\r
    \n
    Boxer\r
    \n
    Border Terrier\r
    \n
    
    7, bạn sẽ thấy rằng phần đầu của tệp không thay đổi và
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    62 hiện được thêm vào cuối tệp:
    : read and write Microsoft Installer files
  • Làm việc với hai tệp cùng một lúc: generate and parse Mac OS X
    /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    84 files

Có những lúc bạn có thể muốn đọc một tệp và ghi vào một tệp khác cùng một lúc. Nếu bạn sử dụng ví dụ được hiển thị khi bạn đang học cách ghi vào một tệp, thì nó thực sự có thể được kết hợp thành các vấn đề sau:

  • /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    85: Bộ công cụ PDF
    : PDF toolkit
  • /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    86: Đọc và ghi các tệp Excel
    : read and write Excel files
  • /
    │
    ├── path/
    |   │
    │   ├── to/
    │   │   └── cats.gif
    │   │
    │   └── dog_breeds.txt
    |
    └── animals.csv
    
    87: Đọc và thao tác hình ảnh
    : image reading and manipulation

Bạn là một pháp sư tập tin Harry!

Bạn làm được rồi!Bây giờ bạn đã biết cách làm việc với các tệp với Python, bao gồm một số kỹ thuật nâng cao.Làm việc với các tệp trong Python bây giờ sẽ dễ dàng hơn bao giờ hết và là một cảm giác bổ ích khi bạn bắt đầu thực hiện nó.

Trong hướng dẫn này, bạn đã học được:

  • Tệp là gì
  • Cách mở và đóng tệp đúng cách
  • Cách đọc và ghi tệp
  • Một số kỹ thuật nâng cao khi làm việc với các tệp
  • Một số thư viện để làm việc với các loại tệp phổ biến

Nếu bạn có bất kỳ câu hỏi, hãy đánh chúng tôi trong các ý kiến.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự.Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Đọc và ghi các tập tin bằng Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Reading and Writing Files in Python