Xem thêm

Đọc và ghi file trong Python: Hướng dẫn chi tiết

Huy Erick
Bạn làm việc gì đấy? Làm việc với file là một phần quan trọng của công việc hàng ngày. Bạn cần biết cách đọc và ghi file trong Python một cách chi tiết. Bài viết...

Bạn làm việc gì đấy? Làm việc với file là một phần quan trọng của công việc hàng ngày. Bạn cần biết cách đọc và ghi file trong Python một cách chi tiết. Bài viết này sẽ hướng dẫn cách thực hiện các thao tác này và cũng chia sẻ cách đọc và ghi cấu trúc từ điển vào tệp JSON.

Đọc và ghi file trong Python

Việc đọc và ghi file trong Python trải qua 3 bước: Mở file, Đọc hoặc ghi file và cuối cùng là đóng file. Trước khi tiến hành, hãy tìm hiểu về các mode khi làm việc với file trong Python.

Mode truy cập tệp trong Python

Việc đọc và ghi file trong Python có các mode làm việc tương ứng:

  • Mode giải thích
  • Read Only ('r')
  • Read & Write ('r+')
  • Write Only ('w')
  • Write & Read ('w+')
  • Append Only ('a')
  • Append & Read ('a+')

Mở file trong Python

Để mở file trong Python, chúng ta không cần phải import thư viện nào thêm cả. Chúng ta sử dụng hàm open() có cú pháp sau:

file_object = open(r'đường_dẫn_tới_file', 'mode')

Lưu ý: Ký tự r trước đường dẫn giúp bỏ qua các ký tự đặc biệt của string trong Python. Chẳng hạn, nếu không có ký tự r này thì trong đường dẫn D:textmyfile.txt sẽ bị coi là dấu tab, dẫn tới xảy ra lỗi không mong muốn.

Đóng file trong Python

Sử dụng hàm close() để đóng đối tượng file sau khi hoàn thành công việc. Đóng file là một bước quan trọng để tránh các vấn đề không mong muốn.

# Mở file để đọc, mode = 'r' rf = open('data.txt', 'r') # hoặc rf = open('data.txt')  # Đóng file rf.close()  # Mở file để ghi, mode = 'w' wf = open('data.txt', 'w')  # Đóng file wf.close()  # Mở file để ghi vào cuối, mode = 'a' wf = open('data.txt', 'a')  # Đóng file wf.close()

Một cách linh hoạt hơn khi làm việc với file mà không cần phải lo khi nào đóng file là sử dụng từ khóa with như sau:

# Python sẽ tự động đóng file with open('/home/user/data.txt', 'r') as fp:     # Thực hiện các khối lệnh khác...

Đọc file trong Python

Python cung cấp 3 cách khác nhau để đọc nội dung từ file. Cùng xem ví dụ để hiểu rõ hơn và áp dụng ngay.

Đọc toàn bộ file ra string

Sử dụng hàm read() để đọc toàn bộ nội dung file vào một biến string.

with open('data.txt') as rf:     content = rf.read()     print(content)  # Kết quả nhận được (nội dung file data.txt): # Kích thước cố định # Cần chỉ rõ kích thước trong khi khai báo # Kích thước thay đổi trong quá trình thêm/ xóa phần tử # Kích thước tối đa phụ thuộc vào bộ nhớ # typedef được dùng để định nghĩa một kiểu dữ liệu trong C. # malloc là hàm cấp phát bộ nhớ của C. Với C++ chúng ta dùng new # sizeof là hàm trả về kích thước của kiểu dữ liệu, dùng làm tham số cho hàm malloc

Đọc từng dòng của file

Sử dụng hàm readline() để đọc từng dòng nội dung của file. Bạn có thể duyệt qua từng dòng như sau:

with open('data.txt') as rf:     line = rf.readline()     index = 1     while line:         print('Line {}: {}'.format(index, line))         index += 1         line = rf.readline()  # Kết quả: # Line 1: Kích thước cố định # Line 2: Cần chỉ rõ kích thước trong khi khai báo # Line 3: Kích thước thay đổi trong quá trình thêm/ xóa phần tử # Line 4: Kích thước tối đa phụ thuộc vào bộ nhớ # Line 5: typedef được dùng để định nghĩa một kiểu dữ liệu trong C. # Line 6: malloc là hàm cấp phát bộ nhớ của C. Với C++ chúng ta dùng new # Line 7: sizeof là hàm trả về kích thước của kiểu dữ liệu, dùng làm tham số cho hàm malloc  # Hàm readline() sẽ đọc 1 dòng, bao gồm cả ký tự newline ('\n'). Nên khi in ra, mỗi dòng có thể có 1 dòng trống phía dưới.

Đọc toàn bộ file ra list

Bạn có thể sử dụng hàm readlines() để đọc toàn bộ file, và kết quả trả về sẽ là một list, trong đó mỗi dòng dữ liệu là một phần tử của list.

with open('data.txt') as rf:     lines = rf.readlines()     for idx, line in enumerate(lines):         print(idx, line)  # Kết quả: # 0 Kích thước cố định # 1 Cần chỉ rõ kích thước trong khi khai báo # 2 Kích thước thay đổi trong quá trình thêm/ xóa phần tử # 3 Kích thước tối đa phụ thuộc vào bộ nhớ # 4 typedef được dùng để định nghĩa một kiểu dữ liệu trong C. # 5 malloc là hàm cấp phát bộ nhớ của C. Với C++ chúng ta dùng new # 6 sizeof là hàm trả về kích thước của kiểu dữ liệu, dùng làm tham số cho hàm malloc  # Lưu ý: Bạn có thể sử dụng hàm `strip()` để xóa khoảng trắng thừa ở đầu và cuối string. Và ký tự newline ('\n') ở cuối mỗi string cũng được xem là một khoảng trắng thừa.

Ghi file trong Python

Để ghi file trong Python, chúng ta có thể sử dụng hàm write() để ghi một biến string, hoặc dùng writelines() để ghi một list các chuỗi string.

texts = [     "0 Kích thước cố định",     "1 Cần chỉ rõ kích thước trong khi khai báo",     "2 Kích thước thay đổi trong quá trình thêm/ xóa phần tử",     "3 Kích thước tối đa phụ thuộc vào bộ nhớ",     "4 typedef được dùng để định nghĩa một kiểu dữ liệu trong C.",     "5 malloc là hàm cấp phát bộ nhớ của C. Với C++ chúng ta dùng new",     "6 sizeof là hàm trả về kích thước của kiểu dữ liệu, dùng làm tham số cho hàm malloc" ]  with open('data.txt', 'w') as wf:     for text in texts:         wf.write(text + '\n')  # Hoặc  texts = [     "0 Kích thước cố định",     "1 Cần chỉ rõ kích thước trong khi khai báo",     "2 Kích thước thay đổi trong quá trình thêm/ xóa phần tử",     "3 Kích thước tối đa phụ thuộc vào bộ nhớ",     "4 typedef được dùng để định nghĩa một kiểu dữ liệu trong C.",     "5 malloc là hàm cấp phát bộ nhớ của C. Với C++ chúng ta dùng new",     "6 sizeof là hàm trả về kích thước của kiểu dữ liệu, dùng làm tham số cho hàm malloc" ]  with open('data.txt', 'w') as wf:     wf.writelines(texts)  # Hàm `writelines()` không tự động chèn thêm '\n' vào cuối mỗi dòng. Nên nếu chạy code trên, các dòng sẽ được ghi liền nhau thành một dòng duy nhất.

Ghi dữ liệu vào cuối file

Chỉ cần thay đổi mode từ 'w' thành 'a' là được. Xem ví dụ:

texts = [     "0 Kích thước cố định",     "1 Cần chỉ rõ kích thước trong khi khai báo",     "2 Kích thước thay đổi trong quá trình thêm/ xóa phần tử",     "3 Kích thước tối đa phụ thuộc vào bộ nhớ",     "4 typedef được dùng để định nghĩa một kiểu dữ liệu trong C.",     "5 malloc là hàm cấp phát bộ nhớ của C. Với C++ chúng ta dùng new",     "6 sizeof là hàm trả về kích thước của kiểu dữ liệu, dùng làm tham số cho hàm malloc" ]  with open('data.txt', 'w') as wf:     for text in texts:         wf.write(text + '\n')  with open('data.txt') as wr:     print("Số dòng:", len(wr.readlines()))  # Ghi file vào cuối with open('data.txt', 'a') as wf:     wf.write('=> Từ LTKK với tình yêu')  with open('data.txt') as wr:     texts = wr.readlines()     print("Số dòng:", len(texts))     print(texts)  # Kết quả: # Số dòng: 7 # Số dòng: 8 # ['0 Kích thước cố định\n', '1 Cần chỉ rõ kích thước trong khi khai báo\n', '2 Kích thước thay đổi trong quá trình thêm/ xóa phần tử\n', '3 Kích thước tối đa phụ thuộc vào bộ nhớ\n', '4 typedef được dùng để định nghĩa một kiểu dữ liệu trong C.\n', '5 malloc là hàm cấp phát bộ nhớ của C. Với C++ chúng ta dùng new\n', '6 sizeof là hàm trả về kích thước của kiểu dữ liệu, dùng làm tham số cho hàm malloc\n', '=> Từ LTKK với tình yêu']

Ghi và đọc JSON từ file

Trong phần này, chúng ta sẽ làm việc với tệp tin JSON sử dụng ngôn ngữ Python. Giả sử chúng ta có file JSON như sau:

Đọc ghi file trong Python
Ảnh minh họa

Cách đọc file JSON

import json  with open('customer.json') as wr:     customers = json.load(wr)     for customer in customers:         print(customer, type(customer))  # Kết quả: # {'id': 1, 'email': '[email protected]', 'first': 'Torrey', 'last': 'Veum', 'company': 'Hilll, Mayert and Wolf', 'created_at': '2014-12-25T04:06:27.981Z', 'country': 'Switzerland'}  # {'id': 2, 'email': '[email protected]', 'first': 'Micah', 'last': 'Sanford', 'company': 'Stokes-Reichel', 'created_at': '2014-07-03T16:08:17.044Z', 'country': "Democratic People's Republic of Korea"} 

Ghi dữ liệu từ điển ra file JSON

import json  customers = [     {         "id": 1,         "email": "[email protected]",         "first": "Torrey",         "last": "Veum",         "company": "Hilll, Mayert and Wolf",         "created_at": "2014-12-25T04:06:27.981Z",         "country": "Switzerland"     },     {         "id": 2,         "email": "[email protected]",         "first": "Micah",         "last": "Sanford",         "company": "Stokes-Reichel",         "created_at": "2014-07-03T16:08:17.044Z",         "country": "Democratic People's Republic of Korea"     } ]  with open('customer.json', 'w') as wr:     json.dump(customers, wr)  # Lưu ý: # - Với dữ liệu tiếng Việt, hàm `dump()` và `dumps()` mặc định đưa toàn bộ về bảng mã ASCII. Để đọc được file JSON khi mở bằng editor, thêm option `ensure_ascii=False`. # - Nếu muốn định dạng đẹp file JSON, hãy thêm option `indent=2` vào hàm `dump()`. Trong đó, 2 là số lượng dấu cách (space) dùng để format file.  import json  customers = [     {         "id": 1,         "email": "[email protected]",         "first": "Hiếu",         "last": "Nguyễn Văn",         "company": "Zalo",         "created_at": "2014-12-25T04:06:27.981Z",         "country": "Việt Nam"     },     {         "id": 2,         "email": "[email protected]",         "first": "Micah",         "last": "Sanford",         "company": "Stokes-Reichel",         "created_at": "2014-07-03T16:08:17.044Z",         "country": "Democratic People's Republic of Korea"     } ]  with open('customer.json', 'w') as wr:     json.dump(customers, wr, ensure_ascii=False, indent=2) 

Vậy là bạn đã biết cách đọc và ghi file trong Python. Với những kiến thức căn bản này, bạn có thể sử dụng và đáp ứng yêu cầu trong công việc một cách dễ dàng. Hy vọng bài viết sẽ hữu ích cho bạn. Chúc bạn học tập tốt!

Tham gia vào nhóm Lập Trình Không Khó để cùng trao đổi và học hỏi: https://www.facebook.com/groups/1023125804557712/

1