Làm cách nào để đọc một tệp văn bản dài trong python?

Đọc tệp văn bản trong Python tương đối dễ so với hầu hết các ngôn ngữ lập trình khác. Thông thường, chúng ta chỉ sử dụng hàm “open[]” ở chế độ đọc hoặc ghi rồi bắt đầu lặp từng dòng của tệp văn bản

Đây đã là cách thực hành tốt nhất và nó không thể là cách dễ dàng hơn. Tuy nhiên khi chúng ta muốn đọc nội dung từ nhiều file thì chắc chắn có cách tốt hơn. Đó là, sử dụng mô-đun “Nhập tệp” được tích hợp sẵn trong Python. Nó kết hợp nội dung từ nhiều tệp cho phép chúng tôi xử lý mọi thứ trong một vòng lặp duy nhất và nhiều lợi ích khác

Trong bài viết này, tôi sẽ minh họa mô-đun này bằng các ví dụ

0. Không có mô-đun FileInput

Ảnh của DGlodowska trên Pixabay

Chúng ta hãy xem cách "thông thường" để đọc nhiều tệp văn bản bằng cách sử dụng hàm

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
2. Nhưng trước đó, chúng ta cần tạo hai tệp mẫu cho mục đích trình diễn

with open['my_file1.txt', mode='w'] as f:
f.write['This is line 1-1\n']
f.write['This is line 1-2\n']
with open['my_file2.txt', mode='w'] as f:
f.write['This is line 2-1\n']
f.write['This is line 2-2\n']

Trong đoạn mã trên, chúng tôi mở một tệp có chế độ

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
3 có nghĩa là “ghi”. Sau đó, chúng tôi viết hai dòng trong tập tin. Xin lưu ý rằng chúng ta cần thêm dòng mới
# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
4. Nếu không, hai câu sẽ được viết trong một dòng

Sau đó, chúng ta sẽ có hai tệp văn bản trong thư mục làm việc hiện tại

Bây giờ, giả sử chúng ta muốn đọc từ cả hai tệp văn bản và in từng dòng nội dung. Tất nhiên, chúng ta vẫn có thể làm điều đó bằng cách sử dụng hàm

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
2

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]

Ở đây chúng ta phải sử dụng hai vòng lặp lồng nhau. Vòng lặp bên ngoài dành cho các tệp, trong khi vòng lặp bên trong dành cho các dòng trong mỗi tệp

1. Sử dụng Mô-đun FileInput

Ảnh của Free-Photos trên Pixabay

Chà, không có gì ngăn cản chúng ta sử dụng hàm

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
2. Tuy nhiên, mô-đun
# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7 chỉ cung cấp cho chúng ta một cách gọn gàng hơn để đọc nhiều tệp văn bản vào một luồng duy nhất

Trước hết, chúng ta cần nhập mô-đun. Đây là mô-đun tích hợp sẵn của Python nên chúng ta không cần tải xuống bất cứ thứ gì

________số 8

Sau đó, chúng ta có thể sử dụng nó để đọc từ hai tệp

with fi.input[files=['my_file1.txt', 'my_file2.txt']] as f:
for line in f:
print[line]

Vì mô-đun

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7 được thiết kế để đọc từ nhiều tệp nên chúng tôi không cần phải lặp tên tệp nữa. Thay vào đó, hàm
# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
9 lấy một loại tập hợp có thể lặp lại, chẳng hạn như danh sách làm tham số. Ngoài ra, điều tuyệt vời là tất cả các dòng từ cả hai tệp đều có thể truy cập được trong một vòng lặp for

2. Sử dụng Mô-đun FileInput với Glob

Ảnh của jarmoluk trên Pixabay

Đôi khi, có thể không thực tế khi có một danh sách tên tệp như vậy với tất cả các tên được nhập thủ công. Việc đọc tất cả các tệp từ một thư mục là khá phổ biến. Ngoài ra, chúng tôi có thể chỉ quan tâm đến một số loại tệp nhất định

Trong trường hợp này, chúng ta có thể sử dụng mô-đun

import fileinput as fi
0, một mô-đun tích hợp sẵn khác của Python cùng với mô-đun
# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7

Chúng ta có thể làm một thí nghiệm đơn giản trước đó. Mô-đun

import fileinput as fi
2 có thể giúp chúng tôi liệt kê tất cả các tệp trong thư mục làm việc hiện tại

Có thể thấy rằng có nhiều tệp khác ngoài hai tệp văn bản. Do đó, chúng tôi muốn lọc tên tệp vì chúng tôi chỉ muốn đọc các tệp văn bản. Chúng ta có thể sử dụng mô-đun

import fileinput as fi
0 như sau

with open['my_file1.txt', mode='w'] as f:
f.write['This is line 1-1\n']
f.write['This is line 1-2\n']
with open['my_file2.txt', mode='w'] as f:
f.write['This is line 2-1\n']
f.write['This is line 2-2\n']
6

Bây giờ, chúng ta có thể đặt hàm

import fileinput as fi
4 vào hàm
import fileinput as fi
5 làm tham số. Vì vậy, chỉ có hai tệp văn bản này sẽ được đọc

with open['my_file1.txt', mode='w'] as f:
f.write['This is line 1-1\n']
f.write['This is line 1-2\n']
with open['my_file2.txt', mode='w'] as f:
f.write['This is line 2-1\n']
f.write['This is line 2-2\n']
9

3. Nhận siêu dữ liệu của tệp

Ảnh của StockSnap trên Pixabay

Bạn có thể hỏi làm cách nào chúng tôi có thể biết chính xác "dòng" là từ tệp nào khi chúng tôi đang đọc từ luồng thực sự được kết hợp với nhiều tệp?

Thật vậy, việc sử dụng hàm

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
2 với vòng lặp lồng nhau dường như rất dễ dàng để lấy thông tin đó vì chúng ta có thể truy cập tên tệp hiện tại từ vòng lặp bên ngoài. Tuy nhiên, điều này thực tế dễ dàng hơn nhiều trong mô-đun
# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
2

Hãy xem, trong đoạn mã trên, chúng tôi sử dụng

import fileinput as fi
8 để truy cập tệp hiện tại mà
import fileinput as fi
9 đến từ đó và
with fi.input[files=['my_file1.txt', 'my_file2.txt']] as f:
for line in f:
print[line]
0 để truy cập chỉ mục hiện tại của dòng mà chúng tôi đang nhận

4. Khi con trỏ đến một tệp mới

Ảnh của DariuszSankowski trên Pixabay

Ngoài ra, còn có nhiều chức năng hơn từ mô-đun

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7 mà chúng ta có thể sử dụng. Ví dụ, nếu chúng ta muốn làm gì đó khi đến một tệp mới thì sao?

Hàm

with fi.input[files=['my_file1.txt', 'my_file2.txt']] as f:
for line in f:
print[line]
2 giúp chúng tôi quyết định xem chúng tôi có đang đọc dòng đầu tiên từ một tệp mới hay không

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
8

Điều này có thể rất hữu ích cho mục đích đăng nhập. Vì vậy, chúng ta có thể được chỉ định với tiến trình hiện tại

5. Chuyển đến tệp tiếp theo

Ảnh của Free-Photos trên Pixabay

Chúng tôi cũng có thể dễ dàng dừng đọc tệp hiện tại và chuyển sang tệp tiếp theo. Chức năng

with fi.input[files=['my_file1.txt', 'my_file2.txt']] as f:
for line in f:
print[line]
3 cho phép chúng tôi làm như vậy

Trước khi chúng tôi có thể demo tính năng này, vui lòng để tôi viết lại hai tệp mẫu

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
0

Sự khác biệt duy nhất so với các tệp gốc là tôi đã thêm một dòng văn bản

with fi.input[files=['my_file1.txt', 'my_file2.txt']] as f:
for line in f:
print[line]
4 vào tệp văn bản đầu tiên. Giả sử chúng ta muốn mô-đun
# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7 ngừng đọc tệp đầu tiên và chuyển sang tệp thứ hai khi nó nhìn thấy nội dung như vậy

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
3

Trong đoạn mã trên, một điều kiện if khác được thêm vào. Khi văn bản dòng là

with fi.input[files=['my_file1.txt', 'my_file2.txt']] as f:
for line in f:
print[line]
4, nó sẽ chuyển sang tệp tiếp theo. Do đó, chúng ta có thể thấy dòng “1–2” không được đọc và xuất

6. Đọc tệp nén mà không cần giải nén

Ảnh được cung cấp bởi kaboompics trên Pixabay

Đôi khi chúng tôi có thể có các tệp nén để đọc. Thông thường chúng ta sẽ phải giải nén ra mới đọc được nội dung. Tuy nhiên, với module

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7, chúng ta có thể không phải trích xuất nội dung từ các file nén rồi mới đọc được

Hãy tạo một tệp văn bản nén bằng Gzip. Tập tin này sẽ được sử dụng cho mục đích trình diễn sau này

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
0

Trong đoạn mã trên, chúng tôi đã thêm tệp

with fi.input[files=['my_file1.txt', 'my_file2.txt']] as f:
for line in f:
print[line]
8 vào tệp nén bằng gzip. Bây giờ, hãy xem làm thế nào
# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7 có thể đọc nó mà không cần thực hiện thêm các bước giải nén

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
1

Bằng cách sử dụng tham số

with open['my_file1.txt', mode='w'] as f:
f.write['This is line 1-1\n']
f.write['This is line 1-2\n']
with open['my_file2.txt', mode='w'] as f:
f.write['This is line 2-1\n']
f.write['This is line 2-2\n']
60 và cờ
with open['my_file1.txt', mode='w'] as f:
f.write['This is line 1-1\n']
f.write['This is line 1-2\n']
with open['my_file2.txt', mode='w'] as f:
f.write['This is line 2-1\n']
f.write['This is line 2-2\n']
61, tệp gzip sẽ được giải nén nhanh chóng

Mô-đun

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7 hiện hỗ trợ gzip và bzip2. Thật không may, không phải định dạng khác

Tóm lược

Ảnh của Free-Photos trên Pixabay

Trong bài viết này, tôi đã giới thiệu mô-đun có sẵn trong Python

# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
7 và cách sử dụng nó để đọc nhiều tệp văn bản. Tất nhiên, nó sẽ không bao giờ thay thế hàm
# Iterate through all file
for file in ['my_file1.txt', 'my_file2.txt']:
with open[file, 'r'] as f:
for line in f:
print[line]
2, nhưng về mặt đọc nhiều tệp vào một luồng, tôi tin rằng đó là cách tốt nhất

Tham gia Medium với liên kết giới thiệu của tôi — Christopher Tao

Là thành viên Phương tiện, một phần phí thành viên của bạn sẽ được chuyển đến các tác giả mà bạn đã đọc và bạn có toàn quyền truy cập vào mọi câu chuyện…

trung bình. com

Nếu bạn cảm thấy bài viết của tôi hữu ích, hãy cân nhắc tham gia Medium Membership để ủng hộ tôi và hàng ngàn người viết khác. [Nhấp vào liên kết ở trên]

Làm cách nào để đọc tệp 100gb bằng Python?

Đọc tệp văn bản lớn bằng Python . Trình vòng lặp sẽ trả về từng dòng một, có thể được xử lý. Điều này sẽ không đọc toàn bộ tệp vào bộ nhớ và nó phù hợp để đọc các tệp lớn trong Python. use the file object as an iterator. The iterator will return each line one by one, which can be processed. This will not read the whole file into memory and it's suitable to read large files in Python.

Làm cách nào để đọc tệp 8gb bằng Python?

Cách nhanh nhất của Python để đọc tệp văn bản lớn [vài GB] .
# Tập tin. readline-ví dụ-3. py
tệp = mở ["mẫu. txt"]
trong khi 1
dòng = tập tin. đường đọc[100000]
nếu không dòng
nghỉ
cho dòng trong dòng
vượt qua # làm gì đó**văn bản mạnh**

Chức năng nào được sử dụng để đọc tập dữ liệu từ một tệp văn bản lớn?

Tệp CSV và văn bản. Hàm workhorse để đọc tệp văn bản [a. k. a. tệp phẳng] là read_csv[] .

Chủ Đề