Tệp

Tệp là một tập hợp dữ liệu trong bộ nhớ ngoài có tên. 

Có hai loại tệp trong Python:
- văn bản, chứa văn bản bị ngắt trên một dòng; Trong số các ký tự đặc biệt trong tệp văn bản, chỉ có thể có các ký tự xuống dòng ("\n") và quay lại đầu dòng ("\r" ;);
- nhị phân, lưu trữ bất kỳ dữ liệu nhị phân nào mà không bị hạn chế (ví dụ: hình ảnh, âm thanh, video, v.v.).

Tiếp theo, chúng tôi sẽ xem xét làm việc với các tệp văn bản.

 

Nguyên tắc làm việc với tệp từ chương trình
Gồm ba giai đoạn:
1. mở tệp;
2. thao tác với tệp;
3. đóng tệp.
Nguyên tắc hoạt động này được gọi là "nguyên tắc bánh sandwich"..

Khi mở tệp, chế độ hoạt động được chỉ định: đọc, ghi hoặc nối thêm dữ liệu vào cuối tệp. Tệp đã mở bị chặn và các chương trình khác không thể truy cập tệp. Sau khi làm việc với tệp, bạn phải đóng tệp để ngắt kết nối với chương trình. Khi một tệp được đóng, tất cả các thay đổi do chương trình thực hiện trong tệp này sẽ được ghi vào đĩa. Python làm việc với các tệp thông qua các biến tệp.

Hàm open() cho phép mở tệp và trả về biến tệp có thể dùng để truy cập tệp.
f = open(file_name, access_mode)
ở đâu:
- file_name - tên tệp cần mở
- access_mode - chế độ mở tệp. Nó có thể là: đọc, viết, v.v. Chế độ mặc định là đọc (r) trừ khi có quy định khác. 
 
Danh sách đầy đủ các chế độ mở tệp
<đầu>
 
Phương thức close() cho phép bạn đóng tệp.

Ví dụ
Vây = mở("input.txt") Fout = open("output.txt")    # làm gì đó với tệp cú đánh.đóng() Vây.đóng() Nếu một tệp hiện có được mở để ghi, nội dung của nó sẽ bị hủy. Sau khi kết thúc chương trình, tất cả các tệp đang mở sẽ tự động đóng lại.
 

Chế độ Mô tả
r Chỉ đọc.
w Chỉ có thể ghi. Sẽ tạo một tệp mới nếu không tìm thấy tên đã chỉ định.
rb Chỉ đọc (nhị phân).
wb Chỉ ghi (nhị phân). Sẽ tạo một tệp mới nếu không tìm thấy tên đã chỉ định.
r+ Để đọc và viết.
rb+ Để đọc và viết (nhị phân).
w+ Để đọc và viết. Sẽ tạo một tệp có thể ghi mới nếu không tìm thấy tên đã chỉ định.
wb+ Để đọc và viết (nhị phân). Sẽ tạo một tệp có thể ghi mới nếu không tìm thấy tên đã chỉ định.
a Mở để thêm nội dung mới. Sẽ tạo một tệp có thể ghi mới nếu không tìm thấy tên đã chỉ định.
a+ Mở để thêm nội dung mới. Sẽ tạo một tệp mới để đọc mục nhập nếu không tìm thấy tên đã chỉ định.
ab Mở để thêm nội dung mới (nhị phân). Sẽ tạo một tệp có thể ghi mới nếu không tìm thấy tên đã chỉ định.
ab+ Mở để thêm nội dung mới (nhị phân). Sẽ tạo một tệp mới để đọc mục nhập nếu không tìm thấy tên đã chỉ định.

Đọc dữ liệu từ tệp

Khi đọc một tệp văn bản, luồng byte lần lượt đi vào đầu vào chương trình, vì vậy tệp cung cấp quyền truy cập tuần tự vào dữ liệu. Nghĩa là, nếu chúng ta cần đọc giá trị thứ 10 từ tệp, trước tiên chúng ta phải đọc giá trị 9 trước đó.

Việc đọc một dòng của tệp cho phép phương thức readline() thực thi. Phương thức này được gọi trên một biến tệp. Vây = mở("input.txt") s = Fin.readline()
Có thể áp dụng nhiều phương thức khác nhau cho chuỗi đã đọc, tương tự như các phương thức được sử dụng khi đọc từ bàn phím (split(), map(), v.v.). Ví dụ: nếu có hai số được phân tách bằng dấu cách trong một dòng của tệp thì bạn có thể đếm chúng như sau: Vây = mở("input.txt") s = Fin.readline().split() # chia dòng trên khoảng trắng s = ["2007", "2021"] a, b = map(int, s)         # áp dụng phương thức int() cho tất cả các phần tử của danh sách s,   # tức là chuyển chuỗi ký tự thành số # a, b = int(s[0], s[1])   # dòng này giống dòng trên # a, b = [int(x) for x in s] # giống như trình tạo
Phương thức read() đọc toàn bộ nội dung của tệp và trả về một chuỗi có thể chứa các ký tự '\n'. Nếu một tham số số nguyên được truyền cho phương thức read(), thì số lượng ký tự được chỉ định sẽ không được đọc nhiều hơn. Ví dụ: bạn có thể đọc tệp theo từng byte bằng cách sử dụng phương thức read(1).
.
Khi một tệp được mở, con trỏ xác định vị trí hiện tại trong tệp được đặt ở đầu tệp và khi đọc, nó sẽ được dịch chuyển đến vị trí sau khi đọc dữ liệu. Khi viết, con trỏ được di chuyển đến vị trí tự do tiếp theo.

Ghi dữ liệu vào tệp

Phương thức write() được sử dụng để ghi dữ liệu vào tệp. Dữ liệu số phải được chuyển đổi thành chuỗi. Điều này có thể được thực hiện bằng phương thức format() hoặc bằng phương thức str().

 

Tệp nhiều dòng

Khi làm việc với tệp nhiều dòng, bạn cần biết khi nào hết dữ liệu trong tệp. Để làm điều này, bạn có thể sử dụng tính năng của phương thức readline(): nếu con trỏ tệp trỏ đến cuối tệp, thì phương thức readline() trả về một chuỗi trống, được coi là giá trị boolean sai: trong khi Đúng:     s = Fin.readline()     nếu không s: ngắt   # nếu nhận được một chuỗi rỗng khi đọc một chuỗi,   # vòng lặp kết thúc bằng câu lệnh break     print(s, end="")  # tắt dòng mới, vì khi đọc một dòng từ tệp                       # ký tự xuống dòng "\n" đã lưu

 

Các cách khác để đọc dữ liệu từ tệp nhiều dòng
1. Ngay lập tức tất cả các dữ liệu trong danh sách. Vây = mở("input.txt") list_strings = Fin.readlines()    # đọc tất cả các dòng cùng một lúc Vây.đóng() cho s trong list_strings:     in(s, end="")
2. Sử dụng cấu trúc with-as. Trong trường hợp này, tệp sẽ tự động đóng sau khi kết thúc chu trình. với open("input.txt") là Fin:     cho s ở Phần Lan:         in(s, end="") Cấu trúc này đảm bảo rằng tệp được đóng. 


3. Một cách lặp qua các chuỗi theo phong cách của ngôn ngữ Python (khuyên dùng cách này). Trong trường hợp này, tệp cũng được đóng tự động. cho s trong open("input.txt"):     in(s, end="")

Tệp Cyrillic

Nếu tệp chứa các chữ cái tiếng Nga (bất kỳ ký tự nào có mã lớn hơn 127), thì bạn phải chỉ định mã hóa khi mở data = open("input.txt", "r", encoding="utf-8")