Các tệp Python là văn bản hay nhị phân?

Chúng tôi cung cấp nhiều lựa chọn các khóa học từ các trường đại học và tổ chức văn hóa hàng đầu từ khắp nơi trên thế giới. Chúng được cung cấp từng bước một và có thể truy cập được trên thiết bị di động, máy tính bảng và máy tính để bàn, vì vậy bạn có thể phù hợp với việc học xung quanh cuộc sống của mình

Chúng tôi tin rằng việc học phải là một trải nghiệm xã hội, thú vị, vì vậy các khóa học của chúng tôi mang đến cơ hội thảo luận những gì bạn đang học với những người khác trong quá trình học, giúp bạn có những khám phá mới mẻ và hình thành những ý tưởng mới
Bạn có thể mở khóa những cơ hội mới với quyền truy cập không giới hạn vào hàng trăm khóa học ngắn hạn trực tuyến trong một năm bằng cách đăng ký gói Không giới hạn của chúng tôi. Xây dựng kiến ​​thức của bạn với các trường đại học và tổ chức hàng đầu

Tìm hiểu thêm về cách FutureLearn đang thay đổi cách tiếp cận giáo dục

Trong tệp văn bản, văn bản, ký tự, số được lưu trữ một ký tự trên mỗi byte i. e. 32667 chiếm 5 byte mặc dù nó chiếm 2 byte trong bộ nhớ

Trong tệp nhị phân, dữ liệu được lưu trữ ở định dạng nhị phân và mỗi dữ liệu sẽ chiếm cùng một số byte trên đĩa khi nó chiếm trong bộ nhớ


Trong tệp văn bản, ký tự xuống dòng được chuyển thành ký tự xuống dòng/nạp dòng trước khi được ghi vào đĩa

Trong tệp nhị phân, việc chuyển đổi dòng mới thành ký tự xuống dòng và nguồn cấp dữ liệu không diễn ra


Các tệp văn bản được sử dụng để lưu trữ dữ liệu thân thiện hơn với người dùng

Các tệp nhị phân được sử dụng để lưu trữ dữ liệu gọn hơn


Trong tệp văn bản, một ký tự đặc biệt có giá trị ASCII là 26 được chèn sau ký tự cuối cùng để đánh dấu kết thúc tệp

Trong tệp nhị phân không có ký tự nào như vậy. Các tệp theo dõi phần cuối của tệp từ số lượng ký tự hiện có

(Nhà tài trợ) Bắt đầu học Python với hướng dẫn Giới thiệu về Python miễn phí của DataCamp. Tìm hiểu Khoa học dữ liệu bằng cách hoàn thành các thử thách mã hóa tương tác và xem video của các chuyên gia hướng dẫn. Bắt đầu bây giờ


Cập nhật ngày 07 tháng 1 năm 2020


Trong bài đăng này, chúng ta sẽ tìm hiểu cách đọc và ghi tệp bằng Python

Làm việc với các tệp bao gồm ba bước sau

  1. Mở tệp tin
  2. Thực hiện thao tác đọc hoặc ghi
  3. Đóng tệp

Hãy xem chi tiết từng bước

Các loại tệp


Có hai loại tập tin

Tệp văn bản chỉ đơn giản là một tệp lưu trữ các chuỗi ký tự bằng mã hóa như utf-8, latin1, v.v. , trong khi trong trường hợp dữ liệu tệp nhị phân được lưu trữ ở định dạng giống như trong Bộ nhớ máy tính

Dưới đây là một số ví dụ về tệp văn bản và tệp nhị phân

tệp văn bản. Mã nguồn Python, tệp HTML, tệp văn bản, tệp đánh dấu, v.v.

tập tin nhị phân. tập tin thực thi, hình ảnh, âm thanh, vv

Điều quan trọng cần lưu ý là bên trong đĩa, cả hai loại tệp đều được lưu trữ dưới dạng chuỗi 1 và 0. Sự khác biệt duy nhất là khi một tệp văn bản được mở, dữ liệu được giải mã trở lại bằng cách sử dụng cùng một sơ đồ mã hóa mà chúng đã được mã hóa trong. Tuy nhiên, trong trường hợp tệp nhị phân, điều đó sẽ không xảy ra

Mở tệp - hàm open()


Hàm tích hợp

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
7 được sử dụng để mở tệp. Cú pháp của nó như sau

open(filename, mode) -> file object

Khi thành công,

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
7 trả về một đối tượng tệp. Khi thất bại, nó tăng
>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
9 hoặc nó là phân lớp

Đối số Mô tả_______4_______0Đường dẫn tuyệt đối hoặc tương đối của tệp sẽ được mở. Chế độ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1(tùy chọn) là một chuỗi đề cập đến chế độ xử lý (i. e đọc, viết, chắp thêm, v.v.;) và loại tệp

Sau đây là các giá trị có thể có của chế độ

Chế độ Mô tả

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2Mở tệp để đọc (mặc định).
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
3Mở tệp để viết.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4Mở tệp ở chế độ nối thêm i. e thêm dữ liệu mới vào cuối file.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5Mở tệp để đọc và ghi cả_______4_______6Chỉ mở tệp để ghi nếu nó chưa tồn tại

Chúng tôi cũng có thể nối thêm

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
7 hoặc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
8 vào chuỗi chế độ để cho biết loại tệp mà chúng tôi sẽ làm việc với.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
7 được sử dụng cho tệp văn bản và
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
8 cho tệp nhị phân. Nếu không được chỉ định,
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
7 được giả định theo mặc định

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1 là tùy chọn, nếu không được chỉ định thì tệp sẽ được mở dưới dạng tệp văn bản chỉ để đọc

Điều này có nghĩa là ba cuộc gọi sau tới

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
7 là tương đương

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')

Lưu ý rằng trước khi bạn có thể đọc tệp, tệp đó phải tồn tại, nếu không thì

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
7 sẽ tăng ngoại lệ
>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(4) # read first 4 characters
'The '
>>>
>>> f.readline() # read until the end of the line is reached
'caged bird sings\n'
>>>
>>> f.readline() # read the second line
'with a fearful trill\n'
>>>
>>> f.readline() # read the third line
'of things unknown\n'
>>>
>>> f.readline() # read the fourth line
'but longed for still'
>>>
>>> f.readline() # EOF reached
''
>>>
>>> f.close()
>>>
5. Tuy nhiên, nếu bạn mở một tệp để ghi (sử dụng chế độ như
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
3,
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4 hoặc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5), Python sẽ tự động tạo tệp cho bạn. Nếu tệp đã tồn tại thì nội dung của nó sẽ bị xóa. Nếu bạn muốn ngăn điều đó, hãy mở tệp ở chế độ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6

Đóng tệp - phương thức close()


Khi bạn làm việc xong với tệp, bạn nên đóng tệp. Mặc dù, tệp sẽ tự động đóng khi chương trình kết thúc nhưng vẫn nên làm như vậy một cách rõ ràng. Không thể đóng tệp trong một chương trình lớn có thể gây ra sự cố và thậm chí có thể khiến chương trình bị lỗi

Để đóng tệp, gọi phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
0 của đối tượng tệp. Đóng tệp sẽ giải phóng các tài nguyên được liên kết với nó và xóa dữ liệu trong bộ đệm vào đĩa

Con trỏ tệp


Khi bạn mở một tệp thông qua phương thức

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
7. Hệ điều hành liên kết một con trỏ trỏ đến một ký tự trong tệp. Con trỏ tệp xác định nơi diễn ra thao tác đọc và ghi. Ban đầu, con trỏ tệp chỉ vào đầu tệp và tăng dần khi chúng ta đọc và ghi dữ liệu vào tệp. Ở phần sau của bài đăng này, chúng ta sẽ xem cách xác định vị trí hiện tại của con trỏ tệp và sử dụng nó để truy cập ngẫu nhiên các phần của tệp

Đọc tệp bằng read(), readline() và readlines()


Để đọc dữ liệu, đối tượng tệp cung cấp các phương thức sau

MethodArgument

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
2Đọc và trả về
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
3 byte trở xuống (nếu không có đủ ký tự để đọc) từ tệp dưới dạng chuỗi. Nếu
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
3 không được chỉ định, nó sẽ đọc toàn bộ tệp dưới dạng một chuỗi và trả về.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5Đọc và trả về các ký tự cho đến khi đạt đến cuối dòng dưới dạng chuỗi.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
6Đọc và trả về tất cả các dòng dưới dạng danh sách các chuỗi

Khi đến cuối tệp (EOF), các phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
7 và
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5 trả về một chuỗi trống, trong khi đó, ______25_______6 trả về một danh sách trống (
>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.readlines()
['The caged bird sings\n', 'with a fearful trill\n', 'of things unknown\n', 'but longed for still\n']
>>>
>>> f.readlines() # EOF reached
[]
>>>
>>> f.close()
>>>
0)

Dưới đây là một số ví dụ

bài thơ. txt

The caged bird sings
with a fearful trill
of things unknown
but longed for still

ví dụ 1. Sử dụng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
7

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>

ví dụ 2. Sử dụng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(4) # read first 4 characters
'The '
>>>
>>> f.readline() # read until the end of the line is reached
'caged bird sings\n'
>>>
>>> f.readline() # read the second line
'with a fearful trill\n'
>>>
>>> f.readline() # read the third line
'of things unknown\n'
>>>
>>> f.readline() # read the fourth line
'but longed for still'
>>>
>>> f.readline() # EOF reached
''
>>>
>>> f.close()
>>>

ví dụ 3. Sử dụng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
6

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.readlines()
['The caged bird sings\n', 'with a fearful trill\n', 'of things unknown\n', 'but longed for still\n']
>>>
>>> f.readlines() # EOF reached
[]
>>>
>>> f.close()
>>>

Đọc tệp theo khối


Các phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
7 (không đối số) và
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
6 đọc tất cả dữ liệu vào bộ nhớ cùng một lúc. Vì vậy, đừng sử dụng chúng để đọc các tệp lớn

Cách tiếp cận tốt hơn là đọc tệp theo từng đoạn bằng cách sử dụng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
7 hoặc đọc từng dòng tệp bằng cách sử dụng
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5, như sau

Thí dụ. Đọc tệp theo khối

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
0

Ví dụ. Đọc từng dòng tệp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
2

Thay vì sử dụng các phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
7 (có đối số) hoặc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5, bạn cũng có thể sử dụng đối tượng tệp để lặp lại nội dung của tệp mỗi lần một dòng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
4

Mã này tương đương với ví dụ trước nhưng ngắn gọn hơn, dễ đọc và dễ gõ hơn

cảnh báo

Hãy cẩn thận với phương pháp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5, nếu bạn không may mở một tệp lớn mà không có bất kỳ dòng mới nào thì
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5 không tốt hơn
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
7 (không có đối số). Điều này cũng đúng khi bạn sử dụng đối tượng tệp làm trình vòng lặp

Viết dữ liệu bằng cách sử dụng write() và writelines()


Để ghi dữ liệu, đối tượng tệp cung cấp hai phương thức sau

MethodDescription

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
3Ghi chuỗi
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
4 vào tệp và trả về số ký tự đã viết.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
5Ghi tất cả các chuỗi trong chuỗi
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
4 vào tệp

Dưới đây là các ví dụ

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
5

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
6

Lưu ý rằng không giống như hàm

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
7, phương thức
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
8 không thêm ký tự xuống dòng (
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
9) ở cuối dòng. Nếu bạn muốn ký tự xuống dòng, bạn phải thêm ký tự đó theo cách thủ công, như sau

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
7

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
8

Bạn cũng có thể thêm dòng mới vào dòng bằng hàm

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
7, như sau

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

The caged bird sings
with a fearful trill
of things unknown
but longed for still
0

Đây là một ví dụ về phương pháp

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
01

The caged bird sings
with a fearful trill
of things unknown
but longed for still
1

The caged bird sings
with a fearful trill
of things unknown
but longed for still
2

Phương thức

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
01 gọi nội bộ phương thức
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
8

The caged bird sings
with a fearful trill
of things unknown
but longed for still
3

Đây là một ví dụ khác mở tệp ở chế độ chắp thêm

The caged bird sings
with a fearful trill
of things unknown
but longed for still
1

The caged bird sings
with a fearful trill
of things unknown
but longed for still
5

Giả sử tệp

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
04 rất quan trọng để sử dụng và chúng tôi không muốn nó bị ghi đè. Để ngăn điều đó, hãy mở tệp ở chế độ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6

The caged bird sings
with a fearful trill
of things unknown
but longed for still
6

Chế độ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6 chỉ mở tệp để ghi, nếu nó chưa tồn tại

Buffering và Flushing


Bộ đệm là quá trình lưu trữ dữ liệu tạm thời trước khi nó được chuyển đến một vị trí mới

Trong trường hợp tệp, dữ liệu không được ghi ngay vào đĩa mà được lưu trữ trong bộ nhớ đệm

Cơ sở lý luận đằng sau việc này là việc ghi dữ liệu vào đĩa cần có thời gian thay vì ghi dữ liệu vào bộ nhớ vật lý. Hãy tưởng tượng một chương trình ghi dữ liệu mỗi khi phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
8 được gọi. Một chương trình như vậy sẽ rất chậm

Khi chúng ta sử dụng bộ đệm, dữ liệu chỉ được ghi vào đĩa khi bộ đệm đầy hoặc khi phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
0 được gọi. Quá trình này được gọi là xả đầu ra. Bạn cũng có thể xóa đầu ra theo cách thủ công bằng cách sử dụng phương thức
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
09 của đối tượng tệp. Lưu ý rằng
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
09 chỉ lưu dữ liệu được đệm vào đĩa. Nó không đóng tập tin

Phương thức

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
7 cung cấp đối số thứ ba tùy chọn để kiểm soát bộ đệm. Để tìm hiểu thêm về nó, hãy truy cập tài liệu chính thức

Đọc và ghi dữ liệu nhị phân


Việc đọc và ghi tệp nhị phân được thực hiện bằng cách nối thêm

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
8 vào chuỗi chế độ

Trong Python 3, dữ liệu nhị phân được biểu diễn bằng một loại đặc biệt có tên là

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
13

Loại

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
13 đại diện cho một dãy số bất biến trong khoảng từ 0 đến 255

Hãy tạo một phiên bản nhị phân của bài thơ bằng cách đọc tệp

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
15

The caged bird sings
with a fearful trill
of things unknown
but longed for still
7

The caged bird sings
with a fearful trill
of things unknown
but longed for still
8

Lưu ý rằng việc lập chỉ mục một đối tượng

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
13 trả về một
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
17

Hãy viết bài thơ nhị phân của chúng ta trong một tệp mới

The caged bird sings
with a fearful trill
of things unknown
but longed for still
9

Bài thơ nhị phân của chúng tôi bây giờ được ghi vào tập tin. Để đọc nó, hãy mở tệp ở chế độ

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
18

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
0

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
1

Điều quan trọng cần lưu ý là, trong trường hợp của chúng tôi, dữ liệu nhị phân có chứa các ký tự có thể in được, như bảng chữ cái, dòng mới, v.v. Tuy nhiên, đây sẽ không phải là trường hợp hầu hết thời gian. Điều đó có nghĩa là với dữ liệu nhị phân, chúng tôi không thể sử dụng một cách đáng tin cậy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
5 và đối tượng tệp (dưới dạng trình lặp) để đọc nội dung của tệp vì có thể không có ký tự xuống dòng trong tệp. Cách tốt nhất để đọc dữ liệu nhị phân là đọc nó theo từng đoạn bằng phương pháp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
7

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
3

Truy cập ngẫu nhiên bằng fseek() và ftell()


Trước đó trong bài đăng này, chúng tôi đã biết rằng khi tệp được mở, hệ thống sẽ liên kết một con trỏ với nó, xác định vị trí sẽ diễn ra quá trình đọc hoặc ghi

Cho đến nay chúng tôi đã đọc và ghi các tập tin một cách tuyến tính. Nhưng cũng có thể đọc và viết tại các vị trí cụ thể. Để đạt được điều này, đối tượng tệp cung cấp hai phương thức sau

Phương thức Mô tả

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
21Trả về vị trí hiện tại của con trỏ tệp.
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
22Di chuyển con trỏ tệp đến
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
23 đã cho.
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
23 đề cập đến số byte và
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
25 xác định vị trí liên quan mà
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
23 sẽ di chuyển con trỏ tệp. Giá trị mặc định của
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
25 là 0, có nghĩa là phần bù sẽ di chuyển con trỏ tệp từ đầu tệp. Nếu wherece được đặt thành
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
28 hoặc
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
29, phần bù sẽ di chuyển con trỏ của tệp từ vị trí hiện tại hoặc từ cuối tệp, tương ứng

Bây giờ chúng ta hãy lấy một số ví dụ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
4

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
5

Sau khi đọc hết 5 ký tự, con trỏ tệp đang ở ký tự

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4 (trong word
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
31). Vì vậy thao tác đọc (hoặc ghi) tiếp theo sẽ bắt đầu từ thời điểm này

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
7

Bây giờ chúng tôi đã đến cuối tập tin. Lúc này ta có thể dùng phương thức

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
32 để tua con trỏ tệp về đầu tệp, như sau

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
8

Con trỏ tệp hiện đang ở đầu tệp. Tất cả các thao tác đọc và ghi từ bây giờ sẽ diễn ra lại từ đầu tệp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
9

Để di chuyển con trỏ tệp từ 12 byte về phía trước từ vị trí hiện tại, hãy gọi

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
33 như sau

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
0

Con trỏ tệp lúc này đang ở ký tự

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4 (sau từ
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
35) nên thao tác đọc ghi sẽ diễn ra từ đó

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
1

Chúng ta cũng có thể di chuyển con trỏ tệp về phía sau. Ví dụ: lệnh gọi sau tới ____18_______33 di chuyển con trỏ tệp về phía sau 13 byte so với vị trí hiện tại

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
2

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
3

Giả sử chúng ta muốn đọc 16 byte cuối cùng của tệp. Để làm như vậy, hãy di chuyển con trỏ tệp về phía sau 16 byte so với cuối tệp

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
4

Các giá trị của đối số

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
25 của
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
32 cũng được định nghĩa là hằng số trong mô-đun
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
39

ValueConstant

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
40
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
41
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
28
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
43
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
29
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
45

với tuyên bố


Câu lệnh with cho phép chúng ta tự động đóng tệp sau khi làm việc xong với nó. Cú pháp của nó như sau

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
5

Các câu lệnh bên trong câu lệnh

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
35 phải được thụt lề bằng nhau giống như vòng lặp for, nếu không thì ngoại lệ
# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
47 sẽ được nâng lên

Đây là một ví dụ

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
6


Hướng dẫn khác (Nhà tài trợ)

Trang web này được hỗ trợ rộng rãi bởi DataCamp. DataCamp cung cấp Hướng dẫn Python tương tác trực tuyến cho Khoa học dữ liệu. Tham gia cùng hơn một triệu người học khác và bắt đầu học Python cho khoa học dữ liệu ngay hôm nay

Tệp Python có phải là tệp nhị phân không?

Python có các công cụ để làm việc với tệp nhị phân . Các tệp nhị phân sử dụng các chuỗi kiểu byte. Điều này có nghĩa là khi đọc dữ liệu nhị phân từ một tệp, một đối tượng kiểu byte được trả về. Tệp nhị phân được mở bằng hàm open(), có tham số chế độ chứa ký tự 'b'.

Tệp Python có phải là tệp văn bản không?

Tệp trong Python được phân loại là văn bản hoặc nhị phân và sự khác biệt giữa hai loại tệp là rất quan trọng. Các tệp văn bản được cấu trúc dưới dạng một chuỗi các dòng, trong đó mỗi dòng bao gồm một chuỗi ký tự. Đây là những gì bạn gọi là mã hoặc cú pháp.

Python có sử dụng nhị phân không?

Trong Python, việc sử dụng số nhị phân mất nhiều bước hơn so với sử dụng số thập phân . Khi bạn nhập số nhị phân, hãy bắt đầu bằng tiền tố '0b' (số 0 theo sau là dấu b rất nhỏ). 0b11 giống như nhị phân 11, tương đương với số thập phân 3. Nó không khó, nhưng nó là công việc phụ.

Chế độ nhị phân so với văn bản trong Python là gì?

Khi chúng tôi cố gắng đọc hoặc ghi tệp trong chương trình của mình, thường có hai chế độ để sử dụng. Chế độ văn bản, thường theo mặc định và chế độ nhị phân. Rõ ràng, ở chế độ văn bản, chương trình ghi dữ liệu vào tệp dưới dạng ký tự văn bản và ở chế độ nhị phân, chương trình ghi dữ liệu vào tệp dưới dạng bit 0/1 .