Phương thức readlines[] của Python lấy một tệp văn bản làm đầu vào và lưu trữ từng dòng trong tệp dưới dạng một phần tử riêng biệt trong danh sách
Đường đọc Python[] có tham số
Chương trình trên không trả về dòng tiếp theo nếu tổng số byte trả về lớn hơn 10 vì lần này với tham số được đặt thành 10 byte trong readlines[]
Làm cách nào để đọc một tệp lớn - từng dòng một?
Trong trường hợp bạn đang làm việc với Dữ liệu lớn, sử dụng readlines[] không hiệu quả lắm vì nó có thể dẫn đến MemoryError vì hàm này tải toàn bộ tệp vào bộ nhớ, sau đó lặp lại nó
Cách tiếp cận tốt hơn một chút đối với các tệp lớn là sử dụng mô-đun fileinput, như sau
tập tin đầu vào. lệnh gọi input[] đọc các dòng một cách tuần tự, nhưng không giữ chúng trong bộ nhớ sau khi chúng được đọc hoặc thậm chí đơn giản là như vậy, vì tệp trong Python có thể lặp lại
Đọc từng dòng tệp vào mảng trong Python
Chương trình sau đọc nội dung của tệp và thêm vào một Mảng
Hàm mở Python []
Hàm open[] mở tệp và trả về dưới dạng đối tượng tệp. Hàm open[] nhận nhiều đối số
cú pháp
FileNotFoundError ngoại lệ
Nếu không tìm thấy tệp trong đường dẫn đã chỉ định, nó sẽ phát sinh ngoại lệ FileNotFoundError. FileNotFoundError là một lớp con của OSError , hãy nắm bắt điều đó hoặc chính ngoại lệ đó
Khi bạn gọi phương thức
1 Python Log -- Day 980
2
3 Today I learned about metaclasses.
4 Metaclasses are a class's class.
5 Meaning every class is an instance of a metaclass.
6 The default metaclass is "type".
7
8 Classes control features [like string representations] of all their instances.
9 Metaclasses can control similar features for their classes.
10
11 I doubt I'll ever need to make a metaclass, at least not for production code.
5 trên một đối tượng tệp, Python sẽ đọc toàn bộ tệp vào bộ nhớ cùng một lúc. Nhưng đó có thể là một ý tưởng tồi nếu bạn đang làm việc với một tệp thực sự lớnCó một cách phổ biến khác để xử lý tệp trong Python. bạn có thể lặp qua một đối tượng tệp để đọc từng dòng một
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
Ở đây, chúng tôi đang in ra một số [đếm lên] trong mỗi dòng trong tệp của chúng tôi
1 Python Log -- Day 980
2
3 Today I learned about metaclasses.
4 Metaclasses are a class's class.
5 Meaning every class is an instance of a metaclass.
6 The default metaclass is "type".
7
8 Classes control features [like string representations] of all their instances.
9 Metaclasses can control similar features for their classes.
10
11 I doubt I'll ever need to make a metaclass, at least not for production code.
Lưu ý rằng khi chúng tôi in, Python không chỉ in ra dòng mà còn thêm một dòng trống ở giữa mỗi dòng trong tệp của chúng tôi. Theo mặc định, hàm
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
0 của Python in một ký tự dòng mới [>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
1] sau bất kỳ ký tự nào khác mà nó in [xem đối số >>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
3 của hàm >>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
0]. Nhưng mỗi dòng của chúng tôi cũng kết thúc bằng một ký tự dòng mới, bởi vì các ký tự dòng mới là những dòng riêng biệt trong một tệp>>> line
"I doubt I'll ever need to make a metaclass, at least not for production code.\n"
Loại bỏ ký tự xuống dòng khi đọc từng dòng
Vì vậy, chúng ta cần loại bỏ ký tự xuống dòng mà hàm
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
0 in ra hoặc chúng ta cần xóa các ký tự xuống dòng khỏi mỗi dòng trong tệp của mình khi chúng ta in chúng ra________số 8
Chúng tôi đang sử dụng phương thức chuỗi
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
5 ở đây để "tước" các ký tự dòng mới từ phía bên trái [phần đầu] của mỗi chuỗi >>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
6 của chúng tôi ngay trước khi in từng dòngCác đối tượng tệp là các lần lặp lười biếng
Các đối tượng tệp trong Python là các lần lặp lười biếng, có nghĩa là chúng ta có thể xử lý chúng theo cách tương tự như bất kỳ lần lặp nào khác
Vì vậy, thay vì đếm ngược theo cách thủ công, chúng ta có thể chuyển đối tượng tệp của mình sang hàm
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
7 tích hợp. Hàm >>> filename = "diary980.md"
>>> with open[filename] as diary_file:
.. n = 1
.. for line in diary_file:
.. print[n, line]
.. n += 1
...
7 sau đó có thể thực hiện việc đếm cho chúng ta khi chúng ta lặp1 Python Log -- Day 980
2
3 Today I learned about metaclasses.
4 Metaclasses are a class's class.
5 Meaning every class is an instance of a metaclass.
6 The default metaclass is "type".
7
8 Classes control features [like string representations] of all their instances.
9 Metaclasses can control similar features for their classes.
10
11 I doubt I'll ever need to make a metaclass, at least not for production code.
3Chúng tôi đã xóa hai dòng mã nhưng chúng tôi nhận được đầu ra giống như trước đây
1 Python Log -- Day 980
2
3 Today I learned about metaclasses.
4 Metaclasses are a class's class.
5 Meaning every class is an instance of a metaclass.
6 The default metaclass is "type".
7
8 Classes control features [like string representations] of all their instances.
9 Metaclasses can control similar features for their classes.
10
11 I doubt I'll ever need to make a metaclass, at least not for production code.
4Lặp lại các tệp để đọc từng dòng một
Các tệp là các lần lặp lười biếng và khi chúng tôi lặp qua một đối tượng tệp, chúng tôi sẽ nhận được các dòng từ tệp đó
Khi Python đọc từng dòng một tệp, nó không lưu trữ toàn bộ tệp trong bộ nhớ cùng một lúc. Thay vào đó, nó lưu trữ một bộ đệm nhỏ gồm các dòng sắp tới trong tệp đó, vì vậy nó tiết kiệm bộ nhớ hơn
Điều đó có nghĩa là việc lặp qua các tệp theo từng dòng đặc biệt quan trọng nếu bạn đang làm việc với các tệp thực sự lớn