Đọc tập tin trong khối python

Đọc một tệp lớn trong bộ nhớ cùng một lúc có thể tiêu tốn toàn bộ RAM của máy tính và có thể gây ra lỗi. Trong những trường hợp như vậy, nó trở nên thích hợp để chia dữ liệu thành các phần. Những đoạn này sau đó có thể được đọc tuần tự và xử lý. Điều này đạt được bằng cách sử dụng tham số chunksize trong read_csv

Các khối kết quả có thể được lặp lại bằng cách sử dụng vòng lặp for. Trong đoạn mã sau, chúng tôi đang in hình dạng của các khối

for chunks in pd.read_csv['Chunk.txt',chunksize=500]:    print[chunks.shape]

Các khối này sau đó có thể được nối với nhau bằng phương thức concat

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]

Trong bài viết này, chúng tôi sẽ cố gắng hiểu cách đọc một tệp văn bản lớn bằng cách nhanh nhất, sử dụng ít bộ nhớ hơn bằng Python.  

Để đọc các tệp văn bản lớn trong Python, chúng ta có thể sử dụng đối tượng tệp làm trình vòng lặp để lặp qua tệp và thực hiện tác vụ được yêu cầu. Vì trình vòng lặp chỉ lặp lại trên toàn bộ tệp và không yêu cầu bất kỳ cấu trúc dữ liệu bổ sung nào để lưu trữ dữ liệu, nên bộ nhớ tiêu thụ tương đối ít hơn. Ngoài ra, trình vòng lặp không thực hiện các thao tác tốn kém như nối thêm, do đó, nó cũng tiết kiệm thời gian. Các tệp có thể lặp lại trong Python do đó nên sử dụng các trình vòng lặp

Sự cố với phương thức readline[] để đọc tệp văn bản lớn

Trong Python, các tệp được đọc bằng cách sử dụng phương thức readlines[]. Phương thức readlines[] trả về một danh sách trong đó mỗi mục của danh sách là một câu hoàn chỉnh trong tệp. Phương pháp này hữu ích khi kích thước tệp nhỏ. Vì phương thức readlines[] nối từng dòng vào danh sách và sau đó trả về toàn bộ danh sách nên sẽ tốn thời gian nếu kích thước tệp quá lớn, tính bằng GB. Ngoài ra, danh sách sẽ tiêu tốn một lượng lớn bộ nhớ, điều này có thể gây rò rỉ bộ nhớ nếu không có đủ bộ nhớ.  

Đọc các tệp văn bản lớn trong Python bằng cách sử dụng lặp

Trong phương pháp này, chúng tôi sẽ nhập mô-đun fileinput. Phương thức input[] của mô-đun fileinput có thể được sử dụng để đọc các tệp lớn. Phương thức này lấy một danh sách các tên tệp và nếu không có tham số nào được truyền, nó sẽ chấp nhận đầu vào từ stdin và trả về một trình vòng lặp trả về các dòng riêng lẻ từ tệp văn bản đang được quét

Ghi chú. Chúng tôi cũng sẽ sử dụng nó để tính thời gian đọc tệp bằng thời gian Python

Python3




# import module

import fileinput

import

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
0

 

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
1

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
2
data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
3
data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
4

 

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
5

import0

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
3 import2

import3 import4import5 import6import7import8import9fileinput0

________ 81 ________ 82 ________ 83

fileinput1import0

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
3 import0fileinput8 fileinput9

fileinput1

import1

import2____13

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
4

 

import5

fileinput2import7import8import9

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
00
data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
01

fileinput2import7

data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
04
data=pd.read_csv['Chunk.txt',chunksize=500]data=pd.concat[data,ignore_index=True]print[data.shape]
05

đầu ra

 

Cách nhanh nhất để đọc một tệp văn bản lớn bằng trình lặp của đối tượng tệp

Ở đây, điểm khác biệt duy nhất là chúng ta sẽ sử dụng iterator của một đối tượng file. Hàm open[] bọc toàn bộ tệp thành một đối tượng tệp. Sau đó, chúng tôi sử dụng một trình vòng lặp để lấy các dòng trong đối tượng tệp. Chúng tôi mở tệp trong khối 'với' vì nó sẽ tự động đóng tệp ngay sau khi toàn bộ khối thực thi

Có thể hữu ích trong một số ứng dụng để có thể đọc từng chút một tệp từ ISO và thực hiện một số xử lý trên đó. PyCdlib cung cấp API trình quản lý ngữ cảnh để cho phép mở tệp và đọc từng phần của tệp. Đây là mã hoàn chỉnh cho ví dụ này

try:
    from cStringIO import StringIO as BytesIO
except ImportError:
    from io import BytesIO

import pycdlib

iso = pycdlib.PyCdlib[]
iso.new[]
foostr = b'foofoo\n'
iso.add_fp[BytesIO[foostr], len[foostr], '/FOO.;1']

with iso.open_file_from_iso[iso_path='/FOO.;1'] as infp:
    all1 = infp.read[]
    infp.seek[0]
    first = infp.read[3]
    second = infp.read[]

iso.close[]

Hãy xem xét kỹ hơn mã

try:
    from cStringIO import StringIO as BytesIO
except ImportError:
    from io import BytesIO

import pycdlib

Như chúng ta đã thấy trước đây, hãy nhập pycdlib. Chúng tôi cũng nhập mô-đun để có thể sử dụng chuỗi python làm đối tượng giống như tệp

iso = pycdlib.PyCdlib[]
iso.new[]
foostr = b'foofoo\n'
iso.add_fp[BytesIO[foostr], len[foostr], '/FOO.;1']

Mã này tạo một ISO mới, thêm một tệp vào đó và ghi nó ra. Điều này rất giống với mã trong Tạo ISO cơ bản mới, vì vậy hãy xem ví dụ đó để biết thêm thông tin

with iso.open_file_from_iso[iso_path='/FOO.;1'] as infp:

Ở đây, chúng tôi sử dụng API để đưa trình quản lý ngữ cảnh vào tệp mà chúng tôi đã tạo;

Cuộc gọi

with iso.open_file_from_iso[iso_path='/FOO.;1'] as infp:
2 đầu tiên đọc tất cả dữ liệu trong tệp, vì vậy khi kết thúc cuộc gọi, biến "tất cả" sẽ chứa
with iso.open_file_from_iso[iso_path='/FOO.;1'] as infp:
3

Sau đó, cuộc gọi 'tìm kiếm' sẽ đặt lại con trỏ tệp về đầu tệp

Nếu API

with iso.open_file_from_iso[iso_path='/FOO.;1'] as infp:
2 được truyền một số, nó sẽ đọc và trả về số byte đó. Trong trường hợp này, biến 'đầu tiên' sẽ chứa
with iso.open_file_from_iso[iso_path='/FOO.;1'] as infp:
5

Làm cách nào để đọc tệp 1gb 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**

Làm cách nào để mở một tệp lớn để đọc dưới dạng tệp nhị phân trong Python?

Hàm open[] mở tệp ở định dạng văn bản theo mặc định. Để mở tệp ở định dạng nhị phân, hãy thêm 'b' vào tham số chế độ . Do đó, chế độ "rb" mở tệp ở định dạng nhị phân để đọc, trong khi chế độ "wb" mở tệp ở định dạng nhị phân để ghi.

Làm cách nào để đọc tệp văn bản trong ngăn xếp Python tràn?

Để đọc một tệp văn bản trong Python, bạn làm theo các bước sau. Đầu tiên, mở một tệp văn bản để đọc bằng hàm open[]. Thứ hai, đọc văn bản từ tệp văn bản bằng phương thức tệp read[] , readline[] hoặc readlines[] của đối tượng tệp. Thứ ba, đóng tệp bằng phương thức đóng tệp []

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

Mở tệp Python .
❮ Trước Sau ❯
f = open["tệp demo. txt", "r"] print[f. đọc[]].
Mở tệp trên một vị trí khác. .
Trả về 5 ký tự đầu tiên của tệp. .
Đọc một dòng của tập tin. .
Đọc hai dòng của tập tin. .
Lặp qua từng dòng tệp. .
Đóng tệp khi bạn hoàn thành với nó

Chủ Đề