12/08/2018, 13:01

Thao tác với File trong Python

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python. 1. Mở File Trước khi làm việc với bất cứ file nào, bạn phải mở file đó. Để mở một file, Python cung cấp hàm open(). Nó trả về một ...

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

1. Mở File

Trước khi làm việc với bất cứ file nào, bạn phải mở file đó. Để mở một file, Python cung cấp hàm open(). Nó trả về một đối tượng file mà được sử dụng với các hàm khác. Với file đã mở, bạn có thể thực hiện các hoạt động như đọc, ghi mới, ghi thêm … trên file đó.

- Cú pháp:

file object = open(file_name [, access_mode][, buffering])

Trong đó:

  • filename: Đối số file_name là một giá trị chuỗi chứa tên của các file mà bạn muốn truy cập.
  • access_mode: Các access_mode xác định các chế độ của file được mở ra như read, write, append,... Đây là thông số tùy chọn và chế độ truy cập file mặc định là read (r).
  • buffering: Nếu buffer được thiết lập là 0, nghĩa là sẽ không có trình đệm nào diễn ra. Nếu xác định là 1, thì trình đệm dòng được thực hiện trong khi truy cập một File. Nếu là số nguyên lớn hơn 1, thì hoạt động đệm được thực hiện với kích cỡ bộ đệm đã cho. Nếu là số âm, thì kích cỡ bộ đệm sẽ là mặc định.

Dưới đây là một danh sách các chế độ khác nhau của việc mở một file:

Mode Mô tả
r Mở file chỉ để đọc
r+ Mở file để đọc và ghi
rb Mở file trong chế độ đọc cho định dạng nhị phân, đây là chế độ mặc định. Con trỏ tại phần bắt đầu của file
rb+ Mở file để đọc và ghi trong định dạng nhị phân. Con trỏ tại phần bắt đầu của file
w Tạo một file mới để ghi, nếu file đã tồn tại thì sẽ bị ghi mới
w+ Tạo một file mới để đọc và ghi, nếu file tồn tại thì sẽ bị ghi mới
wb Mở file trong chế độ ghi trong định dạng nhị phân. Nếu file đã tồn tại, thì ghi đè nội dung của file đó, nếu không thì tạo một file mới
wb+ Mở file để đọc và ghi trong định dạng nhị phân. Nếu file tồn tại thì ghi đè nội dung của nó, nếu file không tồn tại thì tạo một file mới để đọc và ghi
a Mở file để ghi thêm vào cuối file, nếu không tìm thấy file sẽ tạo mới một file để ghi mới
a+ Mở file để đọc và ghi thêm vào cuối file, nếu không tìm thấy file sẽ tạo mới một file để đọc và ghi mới
ab Mở file trong chế độ append trong chế độ nhị phân. Con trỏ là ở cuối file nếu file này đã tồn tại. Nếu file không tồn tại, thì tạo một file mới để ghi
ab+ Mở file trong để đọc và append trong định dạng nhị phân. Con trỏ file tại cuối nếu file đã tồn tại. Nếu không tồn tại thì tạo một file mới để đọc và ghi

- Thuộc tính của File

Thuộc tính Mô tả
file.closed Trả về True nếu file đã đóng, ngược lại là False
file.mode Trả về chế độ truy cập của file đang được mở
file.name Trả về tên của file

- Ví dụ:

#!/usr/bin/python

# Mở file
file = open("plc.txt", "wb")
print "Tên của file là: ", file.name
print "File có đóng hoặc không? : ", file.closed
print "Chế độ mở file : ", file.mode

Kết quả hiện thị trên màn hình:

Tên của file là:  plc.txt
File có đóng hoặc không? :  False
Chế độ mở file :  wb

2. Đóng File

Khi bạn đã thực hiện xong các hoạt động trên file thì cuối cùng bạn cần đóng file đó. Python tự động đóng một file khi đối tượng tham chiếu của một file đã được tái gán cho một file khác. Tuy nhiên, sử dụng phương thức close() để đóng một file vẫn tốt hơn.

** - Cú pháp: **

fileObject.close()

** - Ví dụ:**

#!/usr/bin/python

# Mở file
file = open("plc.txt", "r")

# Đóng file
file.close()

3. Đọc File

Giả sử chúng ta có một file vidu.txt với nội dung như sau:

Hello all!
My name's Phuc.

3.1. Phương thức read

- Cú pháp:

fileObject.read([size])

Phương thức này trả về một chuỗi có kích thước bằng size. Nếu không truyền size thì toàn bộ nội dung của file sẽ được đọc.

**- Ví dụ: **

#!/usr/bin/python
f = open('vidu.txt', 'r')
str= f.read()
print ('Noi dung file la:
', str)

Kết quả in ra màn hình:

Noi dung file la:
Hello all!
My name's Phuc.

3.2. Phương thức readline

- Cú pháp:

fileObject.readline()

Phương thức này cho phép đọc một dòng trong file và trả về chuỗi.

** - Ví dụ: **

#!/usr/bin/python
f = open('vidu.txt', 'r')

line1 = f.readline()
line2 = f.readline()

print ('Dòng 1: ', line1)
print ('Dòng 2: ', line2)

Kết quả in ra màn hình:

Dòng 1:  Hello all!

Dòng 2:  My name's Phuc.

4. Ghi File

Tương tự đọc file, để ghi một file ta cần mở file bằng cú pháp để ghi và sử dụng phương thức write để ghi vào.

**- Cú pháp: **

fileObject.write(string)

Phương thức này cho phép ghi một chuỗi có nội dung là string vào vị trí của con trỏ trong file.

** - Ví dụ: **

#!/usr/bin/python

# Mở file
file = open("plc.txt", "wb")
file.write( "Python là ngôn ngữ tốt nhất");

# Đóng file
file.close()

Và sau đây là nội dung bên trong file plc.txt sau khi thực hiện ghi file thành công.

Python là ngôn ngữ tốt nhất

5. Thay tên File

Phương thức rename() trong module os được sử dụng để thay tên file. Phương thức này nhận hai tham số là tên file cũ và tên file mới.

- Cú pháp:

os.rename("<tên file hiện tại>", "<tên file mới>")

- Ví dụ:

import os

#Thay tên plc1.txt thành plc2.txt:
os.rename( "plc1.txt", "plc2.txt" )

6. Xóa File

Bạn có thể sử dụng phương thức remove() của module os để xóa các file với tham số là tên file bạn cần xóa.

- Cú pháp:

os.remove("<tên file>")

**- Ví dụ: **

import os

# Xóa plc2.txt
os.remove("plc2.txt")

7. Ví trí File

Phương thức tell() sẽ nói cho bạn biết vị trí hiện tại bên trong file. Nói cách khác, việc đọc và ghi tiếp theo sẽ diễn ra trên các byte đó.

Phương thức seek(offset[, from]) thay đổi vị trí hiện tại bên trong file.

  • Tham số offset là chỉ số byte để được di chuyển.
  • Tham số from xác định vị trí tham chiếu mà từ đó byte được di chuyển.
    • Nếu from là 0 thì sử dụng phần đầu file như là vị trí tham chiếu

    • Nếu from là 2 thì sử dụng phần cuối file như là vị trí tham chiếu.

** Ví dụ: **

# Mở file
file = open("plc.txt", "r+")
str = file.read(10);
print "Chuỗi đã đọc là: ", str

# Kiểm tra con trỏ hiện tại
vitri = file.tell();
print "Con trỏ hiện tại: ", vitri

# Đặt lại vị trí con trỏ tại vị trí đầu file
vitri = file.seek(0, 0);
str = file.read(10);
print "Chuỗi đã đọc là : ", str

# Đóng file
file.close()

Kết quả hiện thị trên màn hình như sau:

Chuỗi đã đọc là :  Python là
Con trỏ hiện tại :  10
Chuỗi đã đọc là :  Python là

8. Tham khảo

Ngoài đọc và ghi file còn khá nhiều thao tác khác để xử lý file. Bạn có thể tìm hiểu thêm về các cách thao tác xử lý file trong python khác tại đây:

  • https://docs.python.org/3.5/tutorial/inputoutput.html#reading-and-writing-files
  • http://learnpythonthehardway.org/book/ex16.html
0