Hướng dẫn how do you read a text file line by line and store it in python? - làm thế nào để bạn đọc từng dòng một tệp văn bản và lưu trữ nó trong python?

Giới thiệu

Một nhiệm vụ phổ biến trong lập trình là mở một tệp và phân tích nội dung của nó. Bạn làm gì khi tệp bạn đang cố gắng xử lý khá lớn, như một số GB dữ liệu hoặc lớn hơn? Câu trả lời cho vấn đề này là đọc trong các phần của một tệp tại một thời điểm, xử lý nó, sau đó giải phóng nó khỏi bộ nhớ để bạn có thể xử lý một đoạn khác cho đến khi toàn bộ tệp lớn được xử lý. Mặc dù tùy thuộc vào bạn để xác định kích thước phù hợp cho các khối dữ liệu bạn đang xử lý, đối với nhiều ứng dụng, nhưng việc xử lý một tệp một lần một lần là phù hợp.

Trong suốt bài viết này, chúng tôi sẽ trình bày một số ví dụ mã trình bày cách đọc các tệp từng dòng. Trong trường hợp bạn muốn tự mình thử một số ví dụ này, mã được sử dụng trong bài viết này có thể được tìm thấy tại repo GitHub sau đây.

  • Tệp cơ bản IO trong Python
  • Đọc từng dòng tệp trong Python với
    fp.close()
    
    3
  • Đọc từng dòng tệp trong Python với
    fp.close()
    
    4
  • Đọc từng dòng tệp với vòng lặp
    fp.close()
    
    5-cách tiếp cận tốt nhất!Best Approach!
  • Ứng dụng đọc các tệp từng dòng

Tệp cơ bản IO trong Python

Đọc từng dòng tệp trong Python với

fp.close()
3

Đọc từng dòng tệp trong Python với

fp.close()
4

fp = open('path/to/file.txt', 'r')

Đọc từng dòng tệp với vòng lặp

fp.close()
5-cách tiếp cận tốt nhất!

Ứng dụng đọc các tệp từng dòngPython là một ngôn ngữ lập trình đa năng tuyệt vời và nó có một số chức năng IO rất hữu ích trong thư viện tiêu chuẩn của các hàm và mô-đun tích hợp.
Hàm
fp.close()
6 tích hợp là những gì bạn sử dụng để mở một đối tượng tệp cho mục đích đọc hoặc viết. Đây là cách bạn có thể sử dụng nó để mở một tệp:
Như đã trình bày ở trên, hàm
fp.close()
6 có nhiều đối số. Chúng tôi sẽ tập trung vào hai đối số, với tham số chuỗi vị trí đầu tiên đại diện cho đường dẫn đến tệp bạn muốn mở. Tham số thứ hai (tùy chọn) cũng là một chuỗi và nó chỉ định chế độ tương tác bạn dự định sẽ được sử dụng trên đối tượng tệp được trả về bởi lệnh gọi chức năng. Các chế độ phổ biến nhất được liệt kê trong bảng bên dưới, với mặc định là 'r' để đọc:
Cách thức Sự mô tả
fp.close()
8
Mở để đọc văn bản đơn giản
fp.close()
9
Mở để viết văn bản đơn giản
with open('path/to/file.txt') as fp:
    # Do stuff with fp
0
Mở một tệp hiện có để nối thêm văn bản đơn giản

with open('path/to/file.txt') as fp:
    # Do stuff with fp
1

fp.close()

Mở để đọc dữ liệu nhị phân It's always good practice to close a file object resource, but it's a task that's easy to forget.

with open('path/to/file.txt') as fp:
    # Do stuff with fp
2

with open('path/to/file.txt') as fp:
    # Do stuff with fp

Mở để viết dữ liệu nhị phân

try:
    fp = open('path/to/file.txt')
    # Do stuff with fp
finally:
    fp.close()

Khi bạn đã viết hoặc đọc tất cả các dữ liệu mong muốn trong một đối tượng tệp, bạn cần đóng tệp để tài nguyên có thể được phân bổ lại trên hệ điều hành mà mã đang chạy.

Lưu ý: Luôn luôn thực hành tốt để đóng một tài nguyên đối tượng tệp, nhưng đó là một nhiệm vụ dễ quên.

Mặc dù bạn luôn có thể nhớ gọi

with open('path/to/file.txt') as fp:
    # Do stuff with fp
3 trên một đối tượng tệp, nhưng có một cách khác và thanh lịch hơn để mở một đối tượng tệp và đảm bảo rằng trình thông dịch Python đã dọn sạch sau khi sử dụng nó:: For the remainder of this article we will be working with the text of the book The "Iliad of Homer", which can be found at gutenberg.org, as well as in the GitHub repo where the code is for this article.

Chỉ cần sử dụng từ khóa

with open('path/to/file.txt') as fp:
    # Do stuff with fp
4 (được giới thiệu trong Python 2.5) cho mã chúng tôi sử dụng để mở một đối tượng tệp, Python sẽ làm một cái gì đó tương tự như mã sau. Điều này đảm bảo rằng bất kể đối tượng tệp nào được đóng sau khi sử dụng:

filepath = 'Iliad.txt'
with open(filepath) as fp:
   line = fp.readline()
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       cnt += 1

Một trong hai phương pháp này là phù hợp, với ví dụ đầu tiên là Pythonic hơn.

Đối tượng tệp được trả về từ hàm

fp.close()
6 có ba phương thức rõ ràng phổ biến (
with open('path/to/file.txt') as fp:
    # Do stuff with fp
6,
fp.close()
3 và
fp.close()
4) để đọc trong dữ liệu. Phương thức
with open('path/to/file.txt') as fp:
    # Do stuff with fp
6 đọc tất cả dữ liệu thành một chuỗi. Điều này rất hữu ích cho các tệp nhỏ hơn nơi bạn muốn thực hiện thao tác văn bản trên toàn bộ tệp. Sau đó, có
fp.close()
3, đó là một cách hữu ích để chỉ đọc trong các dòng riêng lẻ, với số lượng gia tăng tại một thời điểm và trả lại chúng dưới dạng chuỗi. Phương pháp rõ ràng cuối cùng,
fp.close()
4, sẽ đọc tất cả các dòng của một tệp và trả về chúng dưới dạng danh sách các chuỗi.

...
Line 567: exceedingly trifling. We have no remaining inscription earlier than the
Line 568: fortieth Olympiad, and the early inscriptions are rude and unskilfully
Line 569: executed; nor can we even assure ourselves whether Archilochus, Simonides
Line 570: of Amorgus, Kallinus, Tyrtaeus, Xanthus, and the other early elegiac and
Line 571: lyric poets, committed their compositions to writing, or at what time the
Line 572: practice of doing so became familiar. The first positive ground which
Line 573: authorizes us to presume the existence of a manuscript of Homer, is in the
Line 574: famous ordinance of Solon, with regard to the rhapsodies at the
Line 575: Panathenaea: but for what length of time previously manuscripts had
Line 576: existed, we are unable to say.
...

Lưu ý: Đối với phần còn lại của bài viết này, chúng tôi sẽ làm việc với văn bản của cuốn sách "Iliad of Homer", có thể tìm thấy tại gutenberg.org, cũng như trong repo GitHub nơi mã cho bài viết này.

Chúng ta hãy bắt đầu với phương thức fp.close() 3, đọc một dòng duy nhất, sẽ yêu cầu chúng ta sử dụng bộ đếm và gia tăng nó:

Đoạn mã này mở một đối tượng tệp có tài liệu tham khảo được lưu trữ trong

try:
    fp = open('path/to/file.txt')
    # Do stuff with fp
finally:
    fp.close()
3, sau đó đọc trong một dòng một tại một thời điểm bằng cách gọi
fp.close()
3 trên đối tượng tệp đó lặp lại trong vòng lặp
try:
    fp = open('path/to/file.txt')
    # Do stuff with fp
finally:
    fp.close()
5. Sau đó, nó chỉ đơn giản là in dòng vào bảng điều khiển.

file = open('Iliad.txt', 'r')
lines = file.readlines()

for index, line in enumerate(lines):
    print("Line {}: {}".format(index, line.strip()))
    
file.close()

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Kết quả này trong:

...
Line 160: INTRODUCTION.
Line 161:
Line 162:
Line 163: Scepticism is as much the result of knowledge, as knowledge is of
Line 164: scepticism. To be content with what we at present know, is, for the most
Line 165: part, to shut our ears against conviction; since, from the very gradual
Line 166: character of our education, we must continually forget, and emancipate
Line 167: ourselves from, knowledge previously acquired; we must set aside old
Line 168: notions and embrace fresh ones; and, as we learn, we must be daily
Line 169: unlearning something which it has cost us no small labour and anxiety to
Line 170: acquire.
...

Bây giờ, mặc dù tốt hơn nhiều, chúng tôi thậm chí không cần gọi phương thức

fp.close()
4 để đạt được chức năng tương tự này. Đây là cách truyền thống để đọc từng dòng tệp, nhưng có một cách hiện đại hơn, ngắn hơn.

Đọc từng dòng tệp với một vòng lặp-cách tiếp cận pythonic nhất

Bản thân

filepath = 'Iliad.txt'
with open(filepath) as fp:
   line = fp.readline()
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       cnt += 1
1 đã trở lại là một điều không thể. Chúng ta không cần phải trích xuất các dòng thông qua
fp.close()
4 - chúng ta có thể lặp lại chính đối tượng được trả về. Điều này cũng giúp bạn dễ dàng
try:
    fp = open('path/to/file.txt')
    # Do stuff with fp
finally:
    fp.close()
9 để chúng tôi có thể viết số dòng trong mỗi câu lệnh
filepath = 'Iliad.txt'
with open(filepath) as fp:
   line = fp.readline()
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       cnt += 1
4.

Đây là cách tiếp cận ngắn nhất, pythonic nhất để giải quyết vấn đề và cách tiếp cận được yêu thích bởi hầu hết:

with open('Iliad.txt') as f:
    for index, line in enumerate(f):
        print("Line {}: {}".format(index, line.strip()))

Kết quả này trong:

...
Line 277: Mentes, from Leucadia, the modern Santa Maura, who evinced a knowledge and
Line 278: intelligence rarely found in those times, persuaded Melesigenes to close
Line 279: his school, and accompany him on his travels. He promised not only to pay
Line 280: his expenses, but to furnish him with a further stipend, urging, that,
Line 281: "While he was yet young, it was fitting that he should see with his own
Line 282: eyes the countries and cities which might hereafter be the subjects of his
Line 283: discourses." Melesigenes consented, and set out with his patron,
Line 284: "examining all the curiosities of the countries they visited, and
...

Bây giờ, mặc dù tốt hơn nhiều, chúng tôi thậm chí không cần gọi phương thức

fp.close()
4 để đạt được chức năng tương tự này. Đây là cách truyền thống để đọc từng dòng tệp, nhưng có một cách hiện đại hơn, ngắn hơn.

  • Đọc từng dòng tệp với một vòng lặp-cách tiếp cận pythonic nhất
  • Bản thân
    filepath = 'Iliad.txt'
    with open(filepath) as fp:
       line = fp.readline()
       cnt = 1
       while line:
           print("Line {}: {}".format(cnt, line.strip()))
           line = fp.readline()
           cnt += 1
    
    1 đã trở lại là một điều không thể. Chúng ta không cần phải trích xuất các dòng thông qua
    fp.close()
    
    4 - chúng ta có thể lặp lại chính đối tượng được trả về. Điều này cũng giúp bạn dễ dàng
    try:
        fp = open('path/to/file.txt')
        # Do stuff with fp
    finally:
        fp.close()
    
    9 để chúng tôi có thể viết số dòng trong mỗi câu lệnh
    filepath = 'Iliad.txt'
    with open(filepath) as fp:
       line = fp.readline()
       cnt = 1
       while line:
           print("Line {}: {}".format(cnt, line.strip()))
           line = fp.readline()
           cnt += 1
    
    4.

Đây là cách tiếp cận ngắn nhất, pythonic nhất để giải quyết vấn đề và cách tiếp cận được yêu thích bởi hầu hết:

Ở đây, chúng tôi đang tận dụng các chức năng tích hợp của Python cho phép chúng tôi dễ dàng lặp lại một đối tượng có thể lặp lại, chỉ đơn giản là sử dụng vòng lặp

fp.close()
5. Nếu bạn muốn đọc thêm về các chức năng tích hợp của Python trên các đối tượng lặp, chúng tôi đã bảo vệ bạn:

fp.close()
0

Python's itertools - Count (), chu kỳ () và chuỗi ()

Python's itertools: Filter (), islice (), map () và zip ()

Ứng dụng đọc các tệp từng dòng

fp.close()
1

Kết quả này trong:

fp.close()
2

Làm thế nào bạn có thể sử dụng điều này thực tế? Hầu hết các ứng dụng NLP liên quan đến tập dữ liệu lớn. Hầu hết thời gian, sẽ không khôn ngoan khi đọc toàn bộ tập đoàn vào bộ nhớ. Mặc dù thô sơ, bạn có thể viết một giải pháp từ đầu tiên để đếm tần số của một số từ nhất định mà không cần sử dụng bất kỳ thư viện bên ngoài nào. Hãy viết một tập lệnh đơn giản tải trong một tệp, đọc từng dòng và đếm tần số của các từ, in 10 từ thường xuyên nhất và số lần xuất hiện của chúng:

Kịch bản sử dụng mô -đun

filepath = 'Iliad.txt'
with open(filepath) as fp:
   line = fp.readline()
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       cnt += 1
6 để đảm bảo rằng tệp chúng tôi đang cố gắng đọc thực sự tồn tại. Nếu vậy, từng dòng đọc của nó và mỗi dòng được chuyển vào hàm
filepath = 'Iliad.txt'
with open(filepath) as fp:
   line = fp.readline()
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       cnt += 1
7. Nó phân định các không gian giữa các từ và thêm từ vào từ điển -
filepath = 'Iliad.txt'
with open(filepath) as fp:
   line = fp.readline()
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       cnt += 1
8. Khi tất cả các dòng được ghi vào từ điển, chúng tôi đặt hàng qua
filepath = 'Iliad.txt'
with open(filepath) as fp:
   line = fp.readline()
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       cnt += 1
9 trả về danh sách các bộ dữ liệu ở định dạng
...
Line 567: exceedingly trifling. We have no remaining inscription earlier than the
Line 568: fortieth Olympiad, and the early inscriptions are rude and unskilfully
Line 569: executed; nor can we even assure ourselves whether Archilochus, Simonides
Line 570: of Amorgus, Kallinus, Tyrtaeus, Xanthus, and the other early elegiac and
Line 571: lyric poets, committed their compositions to writing, or at what time the
Line 572: practice of doing so became familiar. The first positive ground which
Line 573: authorizes us to presume the existence of a manuscript of Homer, is in the
Line 574: famous ordinance of Solon, with regard to the rhapsodies at the
Line 575: Panathenaea: but for what length of time previously manuscripts had
Line 576: existed, we are unable to say.
...
0, được sắp xếp theo số từ.

Phương pháp nào được sử dụng để đọc từng dòng trong từng dòng trong Python?

Phương thức Python Readline () Phương thức read () Phương thức trả về một dòng từ tệp.Bạn cũng có thể chỉ định số lượng byte từ dòng để trả về, bằng cách sử dụng tham số kích thước.readline() Method The readline() method returns one line from the file. You can also specified how many bytes from the line to return, by using the size parameter.

Python có đọc từng dòng không?

Python đọc dòng tệp từng dòng trong Python, bạn có thể đọc tất cả các dòng trong một tệp bằng các phương thức khác nhau.Chúng bao gồm các trình điều chỉnh (), readline () và người quản lý bối cảnh.Bạn có thể đọc tất cả các văn bản trong các tệp sau khi mở chúng và thực hiện các hoạt động khác.you can read all the lines in a file using different methods. These include readlines (), readline () and context managers. You can read all the text in the files after opening them and perform other operations.

Hàm nào đọc văn bản từ từng dòng từng dòng?

BufferedReader readline () Phương thức để đọc dòng tệp theo dòng đến chuỗi.Phương thức này trả về NULL khi đạt được kết thúc của tệp.Dưới đây là một chương trình đơn giản hiển thị ví dụ cho Java đọc dòng tệp từng dòng bằng cách sử dụng BufferedReader. method to read file line by line to String. This method returns null when end of file is reached. Below is a simple program showing example for java read file line by line using BufferedReader.