Python: I/O File

Bài này sẽ trình bày các hàm I/O cơ bản có sẵn trong Python. Để biết thêm về các hàm, vui lòng tham khảo thêm các bài viết trong các topic của Python của V1Study.

In ra màn hình

Cách đơn giản nhất để in kết quả là sử dụng hàm print trong đó bạn có thể truyền (pass) không hoặc nhiều biểu thức được phân tách bằng dấu phẩy. Hàm này chuyển đổi các biểu thức bạn truyền thành một chuỗi và ghi kết quả vào đầu ra chuẩn như sau:

print

(

"Python is really a great language,"

,

"isn't it?")

Điều này tạo ra kết quả sau trên màn hình chuẩn:

Python is really a great language, isn't it?

Đọc đầu vào (input) từ bàn phím

Hàm input([prompt]) giả định đầu vào là một biểu thức Python hợp lệ và trả về kết quả đã được đánh giá. Ví dụ:

str

=

input

(

"Enter your input: "

)

print

(

"Received input is:"

,

str)

Kết quả:

Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is: [x*5 for x in range(2,10,2)]

Mở và đóng tệp

Như vậy ta đã có đầu vào (input) tiêu chuẩn là bàn phím, đầu ra (output) tiêu chuẩn là màn hình máy tính. Bây giờ, ta sẽ xem cách sử dụng các tệp dữ liệu thực tế.

Python cung cấp các hàm và phương thức cơ bản cần thiết để thao tác các tệp theo mặc định. Bạn có thể thực hiện hầu hết các thao tác với tệp bằng đối tượng file.

Phương thức open()

Trước khi có thể đọc hoặc ghi một tệp, bạn phải mở tệp đó bằng hàm open() có sẵn của Python. Hàm này tạo một đối tượng file, đối tượng này sẽ được sử dụng để gọi các phương thức hỗ trợ khác được liên kết với nó.

Cú pháp

file_object = open(file_name [, access_mode][, buffering])

Đây là thông số chi tiết:

  • file_name: Đối số file_name là một chuỗi chứa tên của tệp mà bạn muốn truy cập.
  • access_mode: access_mode xác định chế độ mà tệp phải được mở, tức là đọc, ghi, nối thêm, v.v. Danh sách đầy đủ các giá trị có thể bạn có thể xem ở bảng dưới. Đây là tham số tùy chọn và chế độ truy cập tệp mặc định là đọc (r).
  • buffering: Nếu giá trị đệm được đặt thành 0 thì tức là không có bộ đệm nào. Nếu giá trị bộ đệm là 1, bộ đệm dòng được thực hiện trong khi truy cập tệp. Nếu bạn chỉ định giá trị đệm là một số nguyên lớn hơn 1, thì hành động đệm được thực hiện với kích thước bộ đệm được chỉ định. Nếu âm, kích thước bộ đệm là mặc định của hệ thống (hành vi mặc định).

Bảng sau đây là danh sách các chế độ mở tệp khác nhau:

STTChế độ & Mô tả1

r

Mở tệp chỉ để đọc. Con trỏ tệp được đặt ở đầu tệp. Đây là chế độ mặc định.

2

rb

Mở tệp chỉ để đọc ở định dạng nhị phân. Con trỏ tệp được đặt ở đầu tệp. Đây là chế độ mặc định.

3

r+

Mở tệp để đọc và ghi. Con trỏ tệp được đặt ở đầu tệp.

4

rb+

Mở tệp để đọc và ghi ở định dạng nhị phân. Con trỏ tệp được đặt ở đầu tệp.

5

w

Mở tệp chỉ để ghi. Ghi đè tệp nếu tệp tồn tại. Nếu tệp không tồn tại, hãy tạo một tệp mới để ghi.

6

wb

Mở tệp chỉ để ghi ở định dạng nhị phân. Ghi đè tệp nếu tệp tồn tại. Nếu tệp không tồn tại, hãy tạo một tệp mới để ghi.

7

w+

Mở tệp để ghi và đọc. Ghi đè tệp hiện có nếu tệp tồn tại. Nếu tệp không tồn tại, hãy tạo một tệp mới để đọc và ghi.

8

wb+

Mở tệp để ghi và đọc ở định dạng nhị phân. Ghi đè tệp hiện có nếu tệp tồn tại. Nếu tệp không tồn tại, hãy tạo một tệp mới để đọc và ghi.

9

a

Mở một tệp để bổ sung. Con trỏ tệp ở cuối tệp nếu tệp tồn tại. Tức là, tệp đang ở chế độ nối thêm. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để ghi.

10

ab

Mở tệp để thêm vào ở định dạng nhị phân. Con trỏ tệp ở cuối tệp nếu tệp tồn tại. Tức là, tệp đang ở chế độ nối thêm. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để ghi.

11

a+

Mở một tệp để bổ sung và đọc. Con trỏ tệp ở cuối tệp nếu tệp tồn tại. Tệp sẽ mở ở chế độ nối thêm. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để đọc và ghi.

12

ab+

Mở tệp để bổ sung và đọc ở định dạng nhị phân. Con trỏ tệp ở cuối tệp nếu tệp tồn tại. Tệp sẽ mở ở chế độ nối thêm. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để đọc và ghi.

Các thuộc tính của đối tượng file

Sau khi tệp được mở và bạn có một đối tượng file, bạn có thể nhận được nhiều thông tin khác nhau liên quan đến tệp đó.

Đây là danh sách các thuộc tính liên quan đến đối tượng file:

STTThuộc tính & Mô tả1

file.closed

Trả về true nếu tệp được đóng, nếu không trả về false.

2

file.mode

Trả về chế độ truy cập mà tệp đã được mở.

3

file.name

Trả về tên của tệp.

Ví dụ

# Mở file

fo

=

open

(

"course.txt"

,

"wb"

)

print

(

"Name of the file:"

,

fo

.

name)

print

(

"Closed or not:"

,

fo

.

closed)

print

(

"Opening mode:"

,

fo

.

mode)

Kết quả:
Name of the file: course.txt
Closed or not: False
Opening mode: wb

Phương thức close()

Phương thức close() của một đối tượng file sẽ xóa mọi thông tin không được viết ra và đóng đối tượng file lại, sau đó ta sẽ không thể ghi được nữa.

Python tự động đóng tệp khi đối tượng tham chiếu của tệp được gán lại cho một tệp khác. Bạn nên sử dụng phương thức close() để đóng tệp.

Cú pháp

file_object.close()

Ví dụ

# Mở 1 file

fo

=

open

(

"course.txt"

,

"wb"

)

print

(

"Tên file:"

,

fo

.

name)

# Đóng file đã mở

fo

.

close

()

Kết quả:

Tên file: course.txt

Đọc và ghi tệp

Đối tượng file cung cấp một tập các phương thức truy cập làm cho ta dễ thao tác hơn. Ta sẽ thấy cách sử dụng phương thức read() và write() để đọc và ghi tệp.

Phương thức write()

Phương thức write() ghi bất kỳ chuỗi nào vào một tệp đang mở. Điều quan trọng cần lưu ý là các chuỗi Python có thể có dữ liệu nhị phân chứ không chỉ có dạng văn bản.

Phương thức write() không thêm ký tự dòng mới (‘\ n’) vào cuối chuỗi.

Cú pháp

file_object.write(string)

Ở đây, tham số được truyền là nội dung được ghi vào tệp đã mở.

Ví dụ

# Mở file

fo

=

open

(

"course.txt"

,

"wb"

)

fo

.

write

(

"Python là ngôn ngữ lớn và dễ học.\nYeah its great!!\n"

)

# Đóng file

fo

.

close

()

Phương thức trên sẽ tạo tệp course.txt và sẽ ghi nội dung đã cho vào tệp đó và cuối cùng nó sẽ đóng tệp đó. Nếu bạn mở tệp này, nó sẽ có nội dung sau.

Python là ngôn ngữ lớn và dễ học.
Yeah its great!!

Phương thức read()

Phương thức read() đọc một chuỗi từ một tệp đang mở. Điều quan trọng cần nhắc lại là các chuỗi Python có thể có dữ liệu nhị phân ngoài dữ liệu văn bản.

Cú pháp

file_object.read([count])

Ở đây, tham số được truyền là số byte được đọc từ tệp đã mở. Phương thức này bắt đầu đọc từ đầu tệp và nếu count bị thiếu, thì nó sẽ cố gắng đọc càng nhiều càng tốt, có thể cho đến cuối tệp.

Ví dụ

Hãy lấy dữ liệu từ tệp course.txt , mà ta đã tạo ở trên.

# Mở file

fo

=

open

(

"course.txt"

,

"r+"

)

str

=

fo

.

read

(

10

);

print

(

"Đọc chuỗi:"

,

str)

# Đóng file

fo

.

close

()

Kết quả:

Đọc chuỗi: Python is

Vị trí trong tệp

• Phương thức tell() cho bạn biết vị trí hiện tại trong tệp; nói cách khác, lần đọc hoặc ghi tiếp theo sẽ xảy ra với số byte đó từ đầu tệp.

• Phương thức seek(offset [, from]) thay đổi vị trí tệp hiện tại. Đối số offset cho biết số byte được di chuyển. Đối số from chỉ định vị trí tham chiếu mà từ đó các byte sẽ được di chuyển.

Nếu from được đặt thành 0, có nghĩa là sử dụng phần đầu của tệp làm vị trí tham chiếu và 1 có nghĩa là sử dụng vị trí hiện tại làm vị trí tham chiếu và nếu nó được đặt thành 2 thì phần cuối của tệp sẽ được lấy làm vị trí tham chiếu.

Ví dụ

Ví dụ dưới đây thao tác với tệp course.txt:

# Mở file

fo

=

open

(

"course.txt"

,

"r+"

)

str

=

fo

.

read

(

10

)

print

(

"Đọc chuỗi:"

,

str)

# Kiểm tra vị trí hiện thời

position

=

fo

.

tell

()

print

(

"Vị trí hiện tại:"

,

position)

# Đặt lại vị trí con trỏ tại ví trí đầu

position

=

fo

.

seek

(

0

,

0

);

str

=

fo

.

read

(

10

)

print

(

"Đọc lại dữ liệu:"

,

str)

# Đóng file đã mở

fo

.

close

()

Kết quả:

Đọc chuỗi: Python is
Vị trí hiện tại: 10
Đọc lại dữ liệu: Python is

Đổi tên và xóa tệp

Mô-đun os cung cấp các phương thức giúp bạn thực hiện các thao tác xử lý file, chẳng hạn như đổi tên và xóa các tập tin.

Để sử dụng mô-đun này, bạn cần import nó trước và sau đó bạn có thể gọi bất kỳ phương thức liên quan nào.

Phương thức rename()

Phương thức rename() nhận vào hai đối số là tên tệp hiện tại và tên tệp mới.

Cú pháp

os.rename(current_file_name, new_file_name)

Ví dụ

Sau đây là ví dụ đổi tên tệp hiện có test1.txt:

import

os

# Đổi tên file từ test1.txt thành test2.txt

os

.

rename

(

"test1.txt"

,

"test2.txt"

)

Phương thức remove()

Bạn có thể sử dụng phương thức remove() với đối số là tên tệp để xóa tệp.

Cú pháp

os.remove(file_name)

Ví dụ

Sau đây là ví dụ xóa một tệp test2.txt hiện có;

import

os

# Xóa file test2.txt

os

.

remove

(

"text2.txt"

)

Thư mục trong Python

Tất cả các tệp được chứa trong các thư mục khác nhau và Python cũng không gặp vấn đề gì khi xử lý chúng. Mô-đun os có một số phương thức giúp bạn tạo, loại bỏ, và thay đổi thư mục.

Phương thức mkdir()

Bạn có thể sử dụng phương thức mkdir() của mô-đun os để tạo các thư mục trong thư mục hiện tại. Bạn cần cung cấp một đối số cho phương thức này chứa tên của thư mục sẽ được tạo.

Cú pháp

os.mkdir(“newdir”)

Ví dụ

Sau đây là ví dụ tạo thư mục test trong thư mục hiện tại:

import

os

# Tạo thư mục test

os

.

mkdir

(

"test"

)

Phương thức chdir()

Bạn có thể sử dụng phương thức chdir() để thay đổi thư mục hiện tại. Phương thức chdir() nhận một đối số, là tên của thư mục mà bạn muốn chuyển đến từ thư mục hiện tại.

Cú pháp

os.chdir(“newdir”)

Ví dụ

Sau đây là ví dụ chuyển đến thư mục “/home/newdir”:

import

os

# Chuyển lên thư mục "/home/newdir"

os

.

chdir

(

"/home/newdir"

)

Phương thức getcwd()

Phương thức getcwd() hiển thị thư mục làm việc hiện tại.

Cú pháp

os.getcwd()

Ví dụ

Sau đây là ví dụ cung cấp thư mục hiện tại:

import

os

# Lấy vị trí thư mục hiện thời

os

.

getcwd

()

Phương thức rmdir()

Phương thức rmdir() sẽ xóa thư mục có tên là đối số trong phương thức.

Lưu ý là trước khi xóa một thư mục, tất cả nội dung trong đó phải được xóa.

Cú pháp

os.rmdir(‘dirname’)

Ví dụ

Sau đây là ví dụ loại bỏ thư mục “/tmp/test”. Nó được yêu cầu cung cấp tên đầy đủ đủ điều kiện của thư mục, nếu không nó sẽ tìm kiếm thư mục đó trong thư mục hiện tại.

import

os

# Xóa thư mục "/tmp/test".

os

.

rmdir

(

"/tmp/test"

)

Phương thức liên quan đến tệp & thư mục

Có hai nguồn quan trọng, cung cấp một loạt các phương thức tiện ích để xử lý và thao tác các tệp và thư mục trên hệ điều hành Windows và Unix. Cụ thể như sau:

  • Phương thức của đối tượng file: Đối tượng file cung cấp các phương thức thao tác với tệp.
  • Phương thức của đối tượng os: Cung cấp các phương thức để xử lý tệp cũng như thư mục.