HomeLập trìnhPythonPython Read File...

Python Read File – Cách mở, đọc và ghi vào tệp bằng Python


Đọc và ghi tệp là thao tác phổ biến khi làm việc với bất kỳ ngôn ngữ lập trình nào. Bạn có thể lập trình mã của mình để đọc dữ liệu hoặc hướng dẫn từ một tệp và sau đó ghi cả dữ liệu. Điều này làm tăng hiệu quả và giảm nỗ lực thủ công.

Python có một phương pháp được xác định rõ ràng để mở, đọc và ghi tệp. Một số ứng dụng để thao tác tệp trong Python bao gồm: đọc dữ liệu để đào tạo và kiểm tra thuật toán, đọc tệp để tạo tác phẩm nghệ thuật tổng quát, báo cáo và đọc tệp cấu hình.

Trong hướng dẫn này, bạn sẽ học:

  1. Cách tải tệp vào bộ nhớ chính và tạo bộ xử lý tệp.
  2. Cách sử dụng bộ xử lý tệp để mở tệp để đọc và ghi.
  3. Xử lý ngoại lệ khi làm việc với tệp.

Điều kiện tiên quyết:

  • Đảm bảo bạn đã cài đặt phiên bản Python mới nhất.
  • Quen thuộc với bất kỳ trình soạn thảo văn bản nào hỗ trợ Python mà bạn chọn.
  • Một số quen thuộc với cú pháp Python cơ bản.

Để truy cập nhanh vào Python IDE, hãy xem Replit. Bạn cũng có thể sao chép repo này và chạy nó trên Replit.

Độ bền và cách tải tệp vào bộ nhớ chính

Các tệp nằm trong bộ nhớ thứ cấp của máy tính. Bộ nhớ thứ cấp liên tục, có nghĩa là dữ liệu không bị xóa khi tắt máy tính. Sau khi bạn thực hiện các thay đổi đối với một tệp và lưu tệp đó, các thay đổi đó sẽ được ghi và lưu vĩnh viễn trong bộ nhớ phụ.

Để làm việc với các tệp, trước tiên chúng ta cần tải chúng vào bộ nhớ chính. Bộ nhớ chính là bộ nhớ cache tạm thời chứa dữ liệu được yêu cầu trong một khoảng thời gian ngắn. Dữ liệu bị mất khi tắt nguồn máy tính.

Các tệp được tải từ bộ nhớ phụ vào bộ nhớ chính và sau đó được xử lý bởi CPU.  Sau khi xử lý xong, dữ liệu được ghi trở lại bộ nhớ thứ cấp.
Các tệp được tải từ bộ nhớ phụ vào bộ nhớ chính và sau đó được xử lý bởi CPU. Sau khi xử lý xong, dữ liệu được ghi trở lại bộ nhớ thứ cấp.

Python tương tác với các tệp được tải trong bộ nhớ chính thông qua “xử lý tập tin“. Hãy xem chi tiết các trình xử lý tệp.

Trình xử lý tệp hoạt động như thế nào

Khi chúng ta muốn đọc hoặc ghi một tập tin, chúng ta phải mở nó đầu tiên. Việc mở một tệp báo hiệu cho hệ điều hành tìm kiếm tệp theo tên của nó và đảm bảo rằng nó tồn tại.

Đọc thêm  Quét web bằng Python – Cách cạo dữ liệu từ Twitter bằng Tweepy và Snscrape

Hệ điều hành trả về một trình xử lý tệp nếu mở là thành công. Sau đó, chúng tôi có thể tương tác với tệp của mình thông qua trình xử lý tệp.

Trình xử lý tệp không chứa dữ liệu, nó chỉ cung cấp một giao diện để xử lý các hoạt động của tệp.

Trình xử lý tệp cung cấp cho chương trình của bạn quyền truy cập vào dữ liệu trong bộ nhớ phụ.
Trình xử lý tệp cung cấp cho chương trình của bạn quyền truy cập vào dữ liệu trong bộ nhớ phụ.

Cách mở tệp

Trong ví dụ này, chúng tôi sẽ mở tệp daffodils.txt. Lưu ý rằng tệp này phải được lưu trữ trong cùng thư mục với chương trình Python của bạn. Bạn có thể tải tập tin daffodils.txt từ liên kết GitHub này.

Hãy xem qua tệp vì chúng tôi sẽ làm việc với nội dung của nó trong các ví dụ sắp tới của chúng tôi.

Ví dụ:

fhand = open('daffodils.txt')
print(fhand)

Trong ví dụ trên, HĐH sẽ trả về xử lý tệp trong biến fhand nếu mở là thành công. Theo mặc định, bạn chỉ có thể đọc tệp.

Đầu ra:

hinh-177
Đầu ra của một xử lý tập tin.

Ở đầu ra, chúng tôi đã nhận được một tệp xử lý trong đó name là tên tệp và mode là sự cho phép đó là r (viết tắt của read) trong trường hợp của chúng ta. encoding là cơ chế mã hóa cho bộ ký tự Unicode. Bạn có thể tìm hiểu thêm chi tiết về UTF-8 tại đây.

Ngoại lệ:

Trong trường hợp tệp không tồn tại, chúng tôi nhận được một ngoại lệ như sau:

Ngoại lệ khi không tìm thấy tệp.
Ngoại lệ khi không tìm thấy tệp.

Cách in tệp

Bây giờ chúng tôi có phần xử lý tệp có nghĩa là chúng tôi có thể truy cập tệp. Hãy in tập tin và xem nội dung của nó.

Ví dụ:

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line via file handler
for line in fhand:
  print(line) 

Đầu ra:

hình ảnh-179
In nội dung của một tập tin.

Chúng tôi có thể truy cập và in tệp thành công. Tuy nhiên, bạn có nhận thấy rằng chúng ta đang có thêm các dòng trống giữa mỗi dòng không? Có một lời giải thích cho điều này. Hãy xem trong phần tiếp theo.

Cách xử lý khoảng cách dòng thừa

Ký tự dòng mới được biểu diễn bằng Python bởi \n. Ký tự này thêm một dòng mới khi được đặt ở bất kỳ đâu trong chuỗi.

Có một ký tự dòng mới ở cuối mỗi dòng in ra dòng tiếp theo. Chúng ta có thể hình dung nó bằng cách sử dụng repr phương pháp.

Theo tài liệu Python, repr() phương thức trả về một chuỗi chứa biểu diễn có thể in được của một đối tượng. Điều này có nghĩa là chúng ta có thể thấy bất kỳ ký tự đặc biệt nào như một \t or a \n xuất hiện trong một chuỗi.

Đọc thêm  Huấn luyện AI để chơi trò chơi rắn bằng Python

Hãy chạy một ví dụ bên dưới và xem đầu ra.

hình ảnh-180
Biểu diễn chuỗi bằng cách sử dụng repr().

Ví dụ:

Quay lại tập tin của chúng tôi, chúng tôi có thể sử dụng repr() để kiểm tra các ký tự đặc biệt.

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line via file handler
for line in fhand:
  print(repr(line)) 

Đầu ra:

hinh-181
Ở đây chúng ta có thể thấy những gì đang diễn ra đằng sau hậu trường.

Hơn nữa, phương thức in thêm một dòng mới theo mặc định. Điều này có nghĩa là bằng cách sử dụng bản in, chúng tôi sẽ nhận được một dòng mới khác trong đầu ra. Chúng tôi có thể xử lý dòng bổ sung này bằng hai cách tiếp cận.

Phương pháp #1: Thay đổi giá trị cuối mặc định của bản in

Đoạn mã dưới đây hiển thị các đối số cho print chức năng. Chúng ta có thể thấy rằng theo mặc định, giá trị của end\n. Điều này có nghĩa là mọi câu lệnh in sẽ kết thúc bằng dấu \n.

hinh-22
Nguồn: Tài liệu Python.

Chúng ta có thể thay đổi giá trị mặc định end='\n' vào chỗ trống để chúng tôi không nhận được một dòng mới ở cuối mỗi dòng. Hãy cùng xem ví dụ dưới đây để hiểu rõ hơn.

# By default output would go in separate lines
print("Hello")
print("World")

# Print on the same line because end = ' '
# added single space
print("Hello", end = ' ') 
print("World")

Đầu ra:

hình ảnh-182
In trên cùng một dòng và các dòng khác nhau bằng cách sử dụng print().

Quay lại tệp chính của chúng ta, hãy sửa đổi mã một chút để có được đầu ra mà không cần thêm dòng trống.

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line and modify the default value of 'end'
for line in fhand:
  print(line, end = '')

Đầu ra:

Và ở đây chúng tôi có đầu ra mong muốn của chúng tôi!

In không có dòng thừa bằng print().
In không có dòng thừa bằng cách sử dụng print().

Cách tiếp cận #2: Sử dụng phương thức rstrip()

Chúng ta có thể loại bỏ một số ký tự xung quanh một chuỗi bằng cách sử dụng strip() phương pháp.

Đến bây giờ chúng ta biết rằng theo mặc định, mỗi dòng trong một tệp có "\n" cuối cùng. Vì chúng tôi chỉ quan tâm đến ký tự bên phải, chúng tôi sẽ sử dụng rstrip() viết tắt của dải bên phải. Chúng ta sẽ thảo luận về một ví dụ về rstrip() tiếp theo.

Bạn có thể tìm hiểu thêm về strip() phương pháp trong bài đăng trên blog này.

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line and remove extra line character with rstrip()
for line in fhand:
  line = line.rstrip()
  print(line)

Đầu ra:

In không có dòng thừa bằng cách sử dụng rstrip().
In không có dòng thừa bằng rstrip().

Cách để người dùng chọn tệp

Thay vì mã hóa cứng tên tệp, chúng tôi có thể làm cho mã động bằng cách cho phép người dùng chọn tệp.

Hãy yêu cầu người dùng nhập tên tệp. Sau đó, chúng tôi sẽ tính toán số lượng dòng trong tệp.

Ví dụ:

fname = input('Enter the file name: ')
fhand = open(fname)
count = 0
for line in fhand:
     count = count + 1
print('There are', count, 'lines in', fname)
Yêu cầu người dùng nhập tên tệp.

Đầu ra:

Đọc thêm  Python For Loop – Ví dụ và Hướng dẫn
Yêu cầu người dùng nhập tên tệp.
Yêu cầu người dùng nhập tên tệp.

Cách viết một tệp bằng Python

Theo mặc định, trình xử lý tệp sẽ mở một tệp ở chế độ đọc. Chúng tôi có thể ghi vào một tệp nếu chúng tôi mở tệp bằng bất kỳ chế độ nào sau đây:

  • w– (Ghi) ghi vào tệp hiện có nhưng xóa nội dung hiện có.
  • a– (Append) thêm vào một tệp hiện có.
  • x – (Create) tạo một tệp và trả về lỗi nếu tệp tồn tại.

Làm thế nào để ghi vào một tập tin

Lưu ý rằng, nếu chúng tôi cố gắng mở một tệp đã tồn tại bằng w cờ, nội dung được ghi đè.

# Open file with mode 'w'
fout = open('flower.txt', 'w')
fout.write("This content would be added and existing would be discarded")
fout.close()

Cách thêm vào một tệp

Các a cờ nối thêm vào nội dung hiện có và giữ nguyên nội dung hiện có.

# Open file with mode 'a'
fout = open('flower.txt', 'a')
fout.write("Now the file has more content at the end!")
fout.close()

Làm thế nào để tạo một tập tin và ghi vào nó

Các x chế độ tạo một tệp và thêm nội dung vào đó.

# Open file with mode 'x'
fout = open('new-file.txt', 'x')
fout.write("Now the new file has some content!")
fout.close()

Nếu tệp tồn tại, chúng tôi sẽ nhận được một ngoại lệ như thế này:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    fout = open('flower.txt', 'x')
FileExistsError: [Errno 17] File exists: 'flower.txt'

Xử lý ngoại lệ

Có thể tệp chúng tôi yêu cầu không tồn tại. Điều này làm nổ tung chương trình do ngoại lệ:

hình ảnh-189

Để làm cho chương trình thân thiện hơn với người dùng, chúng ta có thể xử lý ngoại lệ này trong một try-except chặn.

Phần rủi ro của chương trình dự kiến ​​​​sẽ nổ tung được viết trong một try chặn. Trong trường hợp mã thực thi mà không có ngoại lệ, except khối bị bỏ qua và chương trình tiếp tục chạy. Trong trường hợp một ngoại lệ được tìm thấy, except khối chạy và đóng chương trình một cách duyên dáng với exit chỉ huy.

fname = input('Enter the file name: ')
try:
  fhand = open(fname)
except:
  print('File nout found and can not be opened:', fname)
  exit()
count=0
for line in fhand:
  count = count + 1
print('There are', count, 'lines in', fname)

Đầu ra:

hinh-188
Xử lý ngoại lệ bằng cách sử dụng khối thử ngoại trừ.

kết thúc

Biết cách làm việc với các tệp là một khái niệm thiết yếu trong lập trình. Trong hướng dẫn này, bạn đã học cách mở tệp để đọc và ghi bằng Python bằng trình xử lý tệp.

Để tham khảo, tôi đã bao gồm tất cả các đoạn mã và tệp mẫu trong repo GitHub này.

Tôi hy vọng bạn tìm thấy hướng dẫn này hữu ích.

Điều yêu thích của bạn mà bạn đã học được từ hướng dẫn này là gì? cho tôi biết trên Twitter!

Bạn cũng có thể đọc các bài viết khác của tôi ở đây.

Tín dụng biểu ngữ:





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status