Cho đến bây giờ, chúng tôi đã lấy đầu vào từ terminal và ghi lại vào terminal để tương tác với người dùng.
Đôi khi, chỉ hiển thị dữ liệu trên terminal là không đủ. Dữ liệu được hiển thị có thể rất lớn và chỉ có thể hiển thị một lượng dữ liệu hạn chế trên terminal do bộ nhớ không ổn định, không thể khôi phục lại nhiều lần dữ liệu được tạo theo chương trình.
Việc xử lý File đóng một vai trò quan trọng khi dữ liệu cần được lưu trữ vĩnh viễn vào File. File là một vị trí được đặt tên trên đĩa để lưu trữ thông tin liên quan. Chúng tôi có thể truy cập thông tin được lưu trữ (không bay hơi) sau khi chấm dứt chương trình.
Các bài viết liên quan:
Việc triển khai xử lý File hơi dài hoặc phức tạp trong ngôn ngữ lập trình khác, nhưng nó dễ dàng hơn và ngắn hơn trong Python.
Trong Python, các File được xử lý ở hai chế độ là văn bản hoặc nhị phân. File có thể ở định dạng văn bản hoặc nhị phân và mỗi dòng của File được kết thúc bằng ký tự đặc biệt.
Do đó, một hoạt động tập tin có thể được thực hiện theo thứ tự sau.
- Mở File mới
- Đọc hoặc ghi – Thực hiện thao tác
- Đóng File
Mở một tập tin
Python cung cấp một hàm open() chấp nhận hai đối số, tên File và chế độ truy cập mà File được truy cập. Hàm trả về một đối tượng File có thể được sử dụng để thực hiện các thao tác khác nhau như đọc, viết, v.v.
Cú pháp:
file object = open(<file-name>, <access-mode>, <buffering>)
Các File có thể được truy cập bằng nhiều chế độ khác nhau như đọc, ghi hoặc nối thêm. Sau đây là chi tiết về chế độ truy cập để mở File.
Các loại access mode:
- r Nó mở tập tin ở chế độ chỉ đọc. Con trỏ File tồn tại ở đầu. Theo mặc định, File được mở ở chế độ này nếu không có chế độ truy cập nào được thông qua.
- rb Nó mở File ở chế độ chỉ đọc ở định dạng nhị phân. Con trỏ File tồn tại ở đầu File.
- r+ Nó mở File để đọc và ghi cả hai. Con trỏ File tồn tại ở đầu File.
- rb+ Nó mở File để đọc và ghi cả ở định dạng nhị phân. Con trỏ File tồn tại ở đầu File.
- w Nó chỉ mở File để ghi. Nó ghi đè lên File nếu tồn tại trước đó hoặc tạo File mới nếu không có File nào tồn tại cùng tên. Con trỏ File tồn tại ở đầu File.
- wb Nó mở File để chỉ ghi ở định dạng nhị phân. Nó ghi đè lên File nếu nó tồn tại trước đó hoặc tạo một File mới nếu không có File nào tồn tại. Con trỏ File tồn tại ở đầu File.
- w+ Nó mở File để ghi và đọc cả hai. Nó khác với r+ theo nghĩa là nó ghi đè lên File trước đó nếu nó tồn tại trong khi r+ không ghi đè lên File đã ghi trước đó. Nó tạo một File mới nếu không có File nào tồn tại. Con trỏ File tồn tại ở đầu File.
- wb+ Nó mở File để ghi và đọc cả ở định dạng nhị phân. Con trỏ File tồn tại ở đầu File.
- a Nó mở File ở chế độ nối thêm. Con trỏ File tồn tại ở cuối File đã ghi trước đó nếu có. Nó tạo một File mới nếu không có File nào có cùng tên tồn tại.
- ab Nó mở File ở chế độ nối thêm ở định dạng nhị phân. Con trỏ tồn tại ở cuối File đã ghi trước đó. Nó tạo một File mới ở định dạng nhị phân nếu không tồn tại File nào có cùng tên.
- a+ Nó mở một File để nối thêm và đọc cả hai. Con trỏ File vẫn ở cuối File nếu File tồn tại. Nó tạo một File mới nếu không có File nào có cùng tên tồn tại.
- ab+ Nó mở một File để nối thêm và đọc cả hai ở định dạng nhị phân. Con trỏ File vẫn ở cuối File.
Hãy xem ví dụ đơn giản để mở một File có tên “file.txt” (được lưu trữ trong cùng thư mục) ở chế độ đọc và in nội dung của nó trên bàn điều khiển.
Ví dụ
#mở file.txt với chế độ read mode fileptr = open("file.txt","r") if fileptr: print("file mở thành công")
Trong đoạn mã trên, chúng tôi đã chuyển tên File làm đối số đầu tiên và mở File ở chế độ đọc như chúng tôi đã đề cập r làm đối số thứ hai. fileptr giữ đối tượng File và nếu File được mở thành công, nó sẽ thực thi câu lệnh in
Phương thức close()
Khi tất cả các thao tác được thực hiện trên File, chúng ta phải đóng File đó thông qua tập lệnh Python của mình bằng phương thức close(). Mọi thông tin không được viết ra sẽ bị hủy sau khi phương thức close() được gọi trên một đối tượng File.
Chúng tôi có thể thực hiện bất kỳ thao tác nào trên File bên ngoài bằng cách sử dụng hệ thống File hiện đang được mở bằng Python; do đó, nên đóng File sau khi tất cả các thao tác được thực hiện xong.
Cú pháp để sử dụng phương thức close() được đưa ra dưới đây.
cú pháp
fileobject.close()
Hãy xem xét ví dụ sau.
# mở file file.txt với chế độ read mode fileptr = open("file.txt","r") if fileptr: print("file mở thành công") #đóng file fileptr.close()
Sau khi đóng File, chúng ta không thể thực hiện bất kỳ thao tác nào trong File. Các tập tin cần phải được gọi phương thức close(). Nếu có bất kỳ ngoại lệ nào xảy ra trong khi thực hiện một số thao tác trong File thì chương trình sẽ kết thúc mà không đóng File.
Chúng ta nên sử dụng phương pháp sau để khắc phục loại vấn đề như vậy.
try: fileptr = open("file.txt") # phương thức mở file.txt trong try catch finally: fileptr.close()
Câu lệnh with
Câu lệnh with đã được giới thiệu trong python 2.5. Câu lệnh with rất hữu ích trong trường hợp thao tác với các File. Nó được sử dụng trong trường hợp một cặp câu lệnh được thực thi với một khối mã ở giữa.
Cú pháp để mở File bằng câu lệnh with được đưa ra dưới đây.
with open(<file name>, <access mode>) as <file-pointer>: #statement suite
Ưu điểm của việc sử dụng câu lệnh with là nó đảm bảo đóng File bất kể khối lồng nhau thoát ra như thế nào.
Luôn luôn nên sử dụng câu lệnh with trong trường hợp File bởi vì nếu ngắt, trả về hoặc ngoại lệ xảy ra trong khối mã lồng nhau thì nó sẽ tự động đóng File, chúng ta không cần viết hàm close() . Nó không cho phép tập tin bị hỏng.
Hãy xem xét ví dụ sau.
Ví dụ
with open("file.txt",'r') as f: content = f.read(); print(content)
Viết tập tin
Để viết một số văn bản vào một File, chúng ta cần mở File bằng phương thức mở bằng một trong các chế độ truy cập sau.
- w: Nó sẽ ghi đè lên File nếu có File tồn tại. Con trỏ File nằm ở đầu File.
- a: Nó sẽ nối thêm File hiện có. Con trỏ File nằm ở cuối File. Nó tạo một File mới nếu không có File nào tồn tại.
Hãy xem xét ví dụ sau.
Ví dụ
# mở file.txt ở chế độ chắp thêm. Tạo một tệp mới nếu không có tệp đó tồn tại. fileptr = open("file2.txt", "w") # nối thêm nội dung vào tệp fileptr.write('''''Python là ngôn ngữ hiện đại. Nó làm cho mọi thứ trở nên đơn giản. Đây là ngôn ngữ lập trình phát triển nhanh nhất''') # đóng tệp đã mở fileptr.close()
Chúng tôi đã mở File ở chế độ w. File file1.txt không tồn tại, nó đã tạo một File mới và chúng tôi đã viết nội dung trong File bằng cách sử dụng hàm write().
ví dụ 2
#mở tệp.txt ở chế độ ghi. fileptr = open("file2.txt","a") #ghi đè lên nội dung của tập tin fileptr.write(" Python has an easy syntax and user-friendly interaction.") #đóng tệp đã mở fileptr.close()
Chúng ta có thể thấy rằng nội dung của File đã được sửa đổi. Chúng tôi đã mở File trong một chế độ và nó đã nối thêm nội dung trong File2.txt hiện có.
Để đọc File bằng tập lệnh Python, Python cung cấp phương thức read(). Phương thức read() đọc một chuỗi từ File. Nó có thể đọc dữ liệu trong văn bản cũng như định dạng nhị phân.
Cú pháp của phương thức read() được đưa ra dưới đây.
Cú pháp:
fileobj.read(<count>)
Ở đây, số đếm là số byte được đọc từ File bắt đầu từ đầu File. Nếu số lượng không được chỉ định, thì nó có thể đọc nội dung của File cho đến khi kết thúc.
Hãy xem xét ví dụ sau.
Ví dụ
#mở tệp.txt ở chế độ đọc. gây ra lỗi nếu không có tập tin như vậy tồn tại. fileptr = open("file2.txt","r") # lưu trữ tất cả dữ liệu của tệp vào nội dung biến content = fileptr.read(10) # in loại dữ liệu được lưu trữ trong tệp print(type(content)) #in nội dung của tập tin print(content) #đóng tệp đã mở fileptr.close()
Trong đoạn mã trên, chúng ta đã đọc nội dung của file2.txt bằng cách sử dụng hàm read(). Chúng tôi đã chuyển giá trị đếm là mười, nghĩa là nó sẽ đọc mười ký tự đầu tiên từ File.
Nếu chúng ta sử dụng dòng sau, thì nó sẽ in toàn bộ nội dung của File.
content = fileptr.read() print(content)
Đọc File thông qua vòng lặp
Chúng ta có thể đọc File bằng vòng lặp for. Hãy xem xét ví dụ sau.
#mở tệp.txt ở chế độ đọc. gây ra lỗi nếu không có tập tin như vậy tồn tại. fileptr = open("file2.txt","r"); # chạy vòng lặp for for i in fileptr: print(i) # i chứa từng dòng của tệp
Đọc các dòng của tập tin
Python hỗ trợ đọc từng dòng File bằng cách sử dụng phương thức hàm readline(). Phương thức readline() đọc các dòng của File từ đầu, tức là nếu chúng ta sử dụng phương thức readline() hai lần, thì chúng ta có thể nhận được hai dòng đầu tiên của File.
Xem xét ví dụ sau có chứa hàm readline() đọc dòng đầu tiên của File “file2.txt” chứa ba dòng của chúng tôi. Hãy xem xét ví dụ sau.
Ví dụ 1: Đọc dòng sử dụng hàm readline()
#mở tệp.txt ở chế độ đọc. gây ra lỗi nếu không có tập tin như vậy tồn tại. fileptr = open("file2.txt","r"); # lưu trữ tất cả dữ liệu của tệp vào nội dung biến content = fileptr.readline() content1 = fileptr.readline() #in nội dung của tập tin print(content) print(content1) #đóng tệp đã mở fileptr.close()
Chúng tôi đã gọi hàm readline() hai lần, đó là lý do tại sao nó đọc hai dòng từ File.
Python cũng cung cấp phương thức readlines() được sử dụng để đọc các dòng. Nó trả về danh sách các dòng cho đến khi đạt đến cuối File (EOF).
Ví dụ 2: Đọc dòng Sử dụng hàm readlines()
#mở tệp.txt ở chế độ đọc. gây ra lỗi nếu không có tập tin như vậy tồn tại. fileptr = open("file2.txt","r"); # lưu trữ tất cả dữ liệu của tệp vào nội dung biến content = fileptr.readlines() #in nội dung của tập tin print(content) #đóng tệp đã mở fileptr.close()
Tạo một tập tin mới
Có thể tạo File mới bằng cách sử dụng một trong các chế độ truy cập sau với hàm open().
- x: nó tạo một File mới với tên được chỉ định. Nó gây ra lỗi một tập tin tồn tại cùng tên.
- a: Nó tạo một File mới với tên được chỉ định nếu không có File nào tồn tại. Nó nối thêm nội dung vào File nếu File đã tồn tại với tên được chỉ định.
- w: Nó tạo một File mới với tên được chỉ định nếu không có File nào tồn tại. Nó ghi đè lên các tập tin hiện có.
Hãy xem xét ví dụ sau.
ví dụ 1
#mở tệp.txt ở chế độ đọc. gây ra lỗi nếu không có tập tin như vậy tồn tại. fileptr = open("file2.txt","x") print(fileptr) if fileptr: print("File tạo thành công")
Vị trí con trỏ File
Python cung cấp phương thức tell() được sử dụng để in số byte mà tại đó con trỏ File hiện đang tồn tại. Hãy xem xét ví dụ sau.
# mở tệp file2.txt ở chế độ đọc fileptr = open("file2.txt","r") #ban đầu con trỏ tệp ở 0 print("con trỏ xuất hiện byte :",fileptr.tell()) #đọc nội dung của tập tin content = fileptr.read(); # sau khi con trỏ tệp hoạt động đọc sửa đổi. tell() trả về vị trí của fileptr. print("sau khi đọc filepointer tại:",fileptr.tell())
Sửa đổi vị trí con trỏ File
Trong các ứng dụng trong thế giới thực, đôi khi chúng ta cần thay đổi vị trí con trỏ File bên ngoài vì chúng ta có thể cần đọc hoặc ghi nội dung ở các vị trí khác nhau.
Với mục đích này, Python cung cấp cho chúng ta phương thức seek() cho phép chúng ta sửa đổi vị trí con trỏ File bên ngoài.
Cú pháp để sử dụng phương thức seek() được đưa ra dưới đây.
Cú pháp:
<file-ptr>.seek(offset[, from)
Phương thức seek() chấp nhận hai tham số:
- offset: Nó đề cập đến vị trí mới của con trỏ File trong File.
- from: Nó cho biết vị trí tham chiếu từ nơi các byte sẽ được di chuyển. Nếu nó được đặt thành 0, phần đầu của File được sử dụng làm vị trí tham chiếu. Nếu nó được đặt thành 1, vị trí hiện tại của con trỏ File được sử dụng làm vị trí tham chiếu. Nếu nó được đặt thành 2, phần cuối của con trỏ File được sử dụng làm vị trí tham chiếu.
Hãy xem xét ví dụ sau.
Ví dụ
# mở tệp file2.txt ở chế độ đọc fileptr = open("file2.txt","r") #ban đầu con trỏ tệp ở 0 print("Con trỏ File ở byte :",fileptr.tell()) # thay đổi vị trí con trỏ tệp thành 10. fileptr.seek(10); #tell() trả về vị trí của fileptr. print("sau khi đọc, con trỏ filepointer tại:",fileptr.tell())
Mô-đun hệ điều hành Python
Đổi tên tập tin
Mô-đun hệ điều hành Python cho phép tương tác với hệ điều hành. Mô-đun os cung cấp các chức năng liên quan đến các hoạt động xử lý File như đổi tên, xóa, v.v. Nó cung cấp cho chúng ta phương thức rename() để đổi tên File đã chỉ định thành một tên mới. Cú pháp sử dụng phương thức rename() được đưa ra bên dưới.
Cú pháp:
rename(current-name, new-name)
Đối số đầu tiên là tên File hiện tại và đối số thứ hai là tên đã sửa đổi. Chúng ta có thể thay đổi tên File bỏ qua hai đối số này.
Ví dụ 1:
import os #đổi tên file2.txt thành file3.txt os.rename("file2.txt","file3.txt")
Đoạn mã trên đã đổi tên file2.txt hiện tại thành file3.txt
Xóa File
Mô-đun os cung cấp phương thức remove() được sử dụng để xóa File đã chỉ định. Cú pháp sử dụng phương thức remove() được đưa ra bên dưới.
remove(file-name)
ví dụ 1
import os; #xóa file với tên file3.txt os.remove("file3.txt")
Tạo thư mục mới
Phương thức mkdir() được sử dụng để tạo các thư mục trong thư mục làm việc hiện tại. Cú pháp để tạo thư mục mới được đưa ra dưới đây.
Cú pháp:
mkdir(directory name)
ví dụ 1
import os #tạo directory với tên "new" os.mkdir("new")
Phương thức getcwd()
Phương thức này trả về thư mục làm việc hiện tại.
Cú pháp sử dụng phương thức getcwd() được đưa ra dưới đây.
cú pháp
os.getcwd()
Ví dụ
import os os.getcwd()
Thay đổi thư mục làm việc hiện tại
Phương thức chdir() được sử dụng để thay đổi thư mục làm việc hiện tại thành một thư mục được chỉ định.
Cú pháp sử dụng phương thức chdir() được đưa ra dưới đây.
cú pháp
chdir("new-directory")
Ví dụ
import os # Thay đổi thư mục hiện tại bằng thư mục mới os.chdir("C:\\") #Nó sẽ hiển thị thư mục làm việc hiện tại os.getcwd()
Đang xóa thư mục
Phương thức rmdir() được sử dụng để xóa thư mục đã chỉ định.
Cú pháp sử dụng phương thức rmdir() được đưa ra dưới đây.
cú pháp
os.rmdir(directory name)
ví dụ 1
import os #xóa file tên new_directory os.rmdir("directory_name")
Viết đầu ra Python vào các File
Trong Python, có các yêu cầu để ghi đầu ra của tập lệnh Python vào một File.
Phương thức check_call() của quy trình con mô-đun được sử dụng để thực thi tập lệnh Python và ghi đầu ra của tập lệnh đó vào một File.
Ví dụ sau chứa hai tập lệnh python. Tập lệnh file1.py thực thi tập lệnh file.py và ghi đầu ra của nó vào File văn bản output.txt.
Ví dụ
File.py
temperatures=[10,-20,-289,100] def c_to_f(c): if c< -273.15: return "That temperature doesn't make sense!" else: f=c*9/5+32 return f for t in temperatures: print(c_to_f(t))
File1.py
import subprocess with open("output.txt", "wb") as f: subprocess.check_call(["python", "file.py"], stdout=f)
Đối tượng File cung cấp các phương thức sau để thao tác File trên các hệ điều hành khác nhau.
- file.close() Nó đóng file đã mở. File một khi đã đóng, nó không thể đọc hoặc ghi được nữa.
- File.fush() Nó xóa bộ đệm bên trong.
- File.fileno() Nó trả về bộ mô tả File được sử dụng bởi triển khai bên dưới để yêu cầu I/O từ HĐH.
- File.isatty() Nó trả về true nếu File được kết nối với thiết bị TTY, nếu không thì trả về false.
- File.next() Nó trả về dòng tiếp theo từ File.
- File.read([size]) Nó đọc File cho kích thước được chỉ định.
- File.readline([size]) Nó đọc một dòng từ File và đặt con trỏ File tới đầu dòng mới.
- File.readlines([sizehint]) Nó trả về một danh sách chứa tất cả các dòng của File. Nó đọc File cho đến khi EOF xảy ra bằng hàm readline().
- File.seek(offset[,from) Nó sửa đổi vị trí của con trỏ File thành một giá trị offset đã chỉ định với tham chiếu đã chỉ định.
- File.tell() Nó trả về vị trí hiện tại của con trỏ File trong File.
- File.truncate([size]) Nó cắt bớt File thành kích thước được chỉ định tùy chọn.
- File.write(str) Nó ghi chuỗi đã chỉ định vào một File
- File.writelines(seq) Nó ghi một chuỗi các chuỗi vào một File.