Việc lưu trữ dữ liệu trong file giúp bạn giữ lại bản ghi dữ liệu mà chương trình đang làm việc. Điều này có nghĩa là bạn không phải tạo lại dữ liệu mỗi khi làm việc với chương trình. Bạn chỉ cần đọc dữ liệu đó từ file.
Để đọc file, hãy sử dụng phương thức readlines(). Sau khi đã đọc file, bạn dùng split() để chuyển các dòng đó thành một danh sách.
Trong hướng dẫn này, chúng ta thảo luận về cách sử dụng phương thức split() để đọc một file văn bản vào một danh sách. Chúng ta sẽ tham khảo một ví dụ để bạn có thể nhanh chóng bắt đầu đọc file văn bản vào danh sách.
Python: Đọc file văn bản vào danh sách
Hãy bắt đầu với một file văn bản tên là grilled_cheese.txt. File này chứa các nguyên liệu cho một chiếc bánh mì kẹp phô mai nướng. Nội dung file trông như sau:
2 tbsp, ricotta 1 tbsp, grated parmesan 50g, mozzarella 25g, gorgonzola 2, thick slices white bread 1 tbsp, butter
Cột đầu tiên trong file chứa lượng của từng nguyên liệu cần sử dụng. Cột thứ hai chứa tên nguyên liệu.
Chúng ta đọc file này vào mã bằng cách sử dụng phương thức open() và readlines():
with open("grilled_cheese.txt", "r") as grilled_cheese:
lines = grilled_cheese.readlines()
print(lines)
Trong mã của chúng ta, chúng ta mở một file tên "grilled_cheese.txt" ở chế độ đọc. Chế độ đọc được biểu thị bằng ký tự "r" trong câu lệnh open(). Tiếp theo, chúng ta in các dòng đó ra console.
Hãy xem mã Python của chúng ta trả về gì:
['2 tbsp, ricotta\n', '1 tbsp, grated parmesan\n', '50g, mozzarella\n', '25g, gorgonzola\n', '2, thick slices white bread\n', '1 tbsp, butter\n']
Mã của chúng ta trả về một danh sách các dòng trong file. Đây chưa phải là đầu ra chúng ta mong đợi. Mặc dù chúng ta đã đọc file vào một danh sách, nhưng có một vấn đề: mỗi dòng được lưu trữ trong một chuỗi riêng biệt. Nguyên liệu và lượng của chúng không được tách biệt.
Chia giá trị thành danh sách
Để giải quyết vấn đề này, chúng ta sử dụng phương thức split(). Phương thức này cho phép chúng ta chia một chuỗi bằng một ký tự phân tách mà chúng ta chỉ định.
Đầu tiên, chúng ta khai báo hai danh sách: quantities (lượng) và ingredients (nguyên liệu). Mã này sẽ vẫn được thụt lề vì nó là một phần của khối mã open().
quantities = [] ingredients = []
Chúng ta sẽ lặp qua danh sách của mình để truy cập từng dòng văn bản từ file. Sau đó, chúng ta sẽ chia mỗi dòng thành hai phần. Điểm chia là dấu phẩy theo sau bởi một khoảng trắng trên mỗi dòng:
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1])
Vòng lặp for cho phép chúng ta đọc file từng dòng. Giá trị đầu tiên trong "as_list" là lượng của một nguyên liệu. Giá trị thứ hai là tên nguyên liệu. Sau đó, chúng ta in cả hai danh sách này ra console:
print(quantities) print(ingredients)
Chạy mã và xem kết quả:
['2 tbsp, ricotta\n', '1 tbsp, grated parmesan\n', '50g, mozzarella\n', '25g, gorgonzola\n', '2, thick slices white bread\n', '1 tbsp, butter\n'] ['2 tbsp', '1 tbsp', '50g', '25g', '2', '1 tbsp'] ['ricotta\n', 'grated parmesan\n', 'mozzarella\n', 'gorgonzola\n', 'thick slices white bread\n', 'butter\n']
Mã của chúng ta in ra ba danh sách trên console. Danh sách đầu tiên là danh sách tất cả các dòng văn bản trong file. Danh sách thứ hai chứa tất cả các lượng từ file. Danh sách thứ ba chứa tất cả các nguyên liệu.
Loại bỏ ký tự xuống dòng
Vẫn còn một cải tiến chúng ta cần thực hiện. Mỗi nguyên liệu đều kết thúc bằng ký tự "\n". Ký tự này biểu thị một dòng mới. Chúng ta có thể loại bỏ ký tự này bằng cách sử dụng phương thức replace():
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1].replace("\n", ""))
Trong vòng lặp for, chúng ta thay thế giá trị "\n" bằng một chuỗi rỗng. Chúng ta làm điều này trên giá trị as_list[1] tương ứng với tên của từng nguyên liệu.
Bây giờ chúng ta đã thực hiện thay đổi này, chương trình của chúng ta đã sẵn sàng:
with open("grilled_cheese.txt", "r") as grilled_cheese:
lines = grilled_cheese.readlines()
quantities = []
ingredients = []
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1].replace("\n", ""))
print(quantities)
print(ingredients)
Chạy mã và xem điều gì xảy ra:
['2 tbsp', '1 tbsp', '50g', '25g', '2', '1 tbsp'] ['ricotta', 'grated parmesan', 'mozzarella', 'gorgonzola', 'thick slices white bread', 'butter']
Mã của chúng ta chuyển đổi thành công file văn bản thành hai danh sách. Một danh sách chứa lượng nguyên liệu cho công thức. Danh sách kia chứa các nguyên liệu chúng ta sẽ sử dụng cho công thức.
Kết luận
Bạn có thể đọc một file văn bản bằng cách sử dụng phương thức open() và readlines(). Để đọc một file văn bản vào một danh sách, hãy sử dụng phương thức split(). Phương thức này chia chuỗi thành một danh sách tại một ký tự nhất định.
Trong ví dụ trên, chúng ta chia một chuỗi thành danh sách dựa trên vị trí của dấu phẩy và khoảng trắng (", "). Bây giờ bạn đã sẵn sàng đọc file văn bản vào danh sách trong Python như một chuyên gia.