Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Tôi muốn đọc một tệp lớn (> 5GB), từng dòng, mà không tải toàn bộ nội dung của nó vào bộ nhớ. Tôi không thể sử dụng

for line in open("log.txt"):
    do_something_with(line)
5 vì nó tạo ra một danh sách rất lớn trong bộ nhớ.

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Karl Knechtel

59.4K10 Huy hiệu vàng86 Huy hiệu bạc132 Huy hiệu đồng10 gold badges86 silver badges132 bronze badges

Đã hỏi ngày 25 tháng 6 năm 2011 lúc 2:04Jun 25, 2011 at 2:04

1

Sử dụng vòng lặp

for line in open("log.txt"):
    do_something_with(line)
6 trên một đối tượng tệp để đọc từng dòng. Sử dụng
for line in open("log.txt"):
    do_something_with(line)
7 để cho phép Trình quản lý bối cảnh đảm bảo rằng tệp được đóng sau khi đọc:

with open("log.txt") as infile:
    for line in infile:
        print(line)

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Mateen Ulhaq

22.6K16 Huy hiệu vàng86 Huy hiệu bạc128 Huy hiệu đồng16 gold badges86 silver badges128 bronze badges

Đã trả lời ngày 25 tháng 6 năm 2011 lúc 2:26Jun 25, 2011 at 2:26

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

John La Rooyjohn La RooyJohn La Rooy

Phù bằng vàng 287K5151 gold badges359 silver badges500 bronze badges

9

Tất cả những gì bạn cần làm là sử dụng đối tượng tệp làm trình lặp.

for line in open("log.txt"):
    do_something_with(line)

Thậm chí tốt hơn là sử dụng Trình quản lý ngữ cảnh trong các phiên bản Python gần đây.

with open("log.txt") as fileobject:
    for line in fileobject:
        do_something_with(line)

Điều này cũng sẽ tự động đóng tệp là tốt.

Đã trả lời ngày 25 tháng 6 năm 2011 lúc 2:07Jun 25, 2011 at 2:07

3

Một cách tiếp cận trường học cũ:

fh = open(file_name, 'rt')
line = fh.readline()
while line:
    # do stuff with line
    line = fh.readline()
fh.close()

Đã trả lời ngày 25 tháng 6 năm 2011 lúc 2:31Jun 25, 2011 at 2:31

PtbnlptbnlPTBNL

6.0274 Huy hiệu vàng27 Huy hiệu bạc33 Huy hiệu đồng4 gold badges27 silver badges33 bronze badges

2

Vui lòng thử điều này:

with open('filename','r',buffering=100000) as f:
    for line in f:
        print line

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Đã trả lời ngày 25 tháng 1 năm 2018 lúc 14:48Jan 25, 2018 at 14:48

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Jyoti Dasjyoti Dasjyoti das

2062 Huy hiệu bạc5 Huy hiệu Đồng2 silver badges5 bronze badges

2

Thay vào đó, bạn nên sử dụng một iterator. Có liên quan:

for line in open("log.txt"):
    do_something_with(line)
8 - Lặp lại các dòng từ nhiều luồng đầu vào.
Relevant:
for line in open("log.txt"):
    do_something_with(line)
8 — Iterate over lines from multiple input streams.

Từ các tài liệu:

import fileinput
for line in fileinput.input("filename", encoding="utf-8"):
    process(line)

Điều này sẽ tránh sao chép toàn bộ tệp vào bộ nhớ cùng một lúc.

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Martineau

Huy hiệu vàng 116K2525 gold badges161 silver badges286 bronze badges

Đã trả lời ngày 25 tháng 6 năm 2011 lúc 2:06Jun 25, 2011 at 2:06

MikolamikolaMikola

8.9472 Huy hiệu vàng33 Huy hiệu bạc41 Huy hiệu đồng2 gold badges33 silver badges41 bronze badges

1

Đây là những gì bạn làm nếu bạn không có dòng mới trong tệp:

with open('large_text.txt') as f:
  while True:
    c = f.read(1024)
    if not c:
      break
    print(c,end='')

Sivann

2.0464 Huy hiệu vàng28 Huy hiệu bạc44 Huy hiệu đồng4 gold badges28 silver badges44 bronze badges

Đã trả lời ngày 6 tháng 5 năm 2018 lúc 15:20May 6, 2018 at 15:20

Ariel Cabibariel CabibAriel Cabib

2.01218 Huy hiệu bạc14 Huy hiệu đồng18 silver badges14 bronze badges

2

Tôi không thể tin rằng nó có thể dễ dàng như câu trả lời của @john-la-rooy. Vì vậy, tôi đã tạo lại lệnh

for line in open("log.txt"):
    do_something_with(line)
9 bằng cách đọc và viết theo dòng. Nó thật nhanh.

#!/usr/bin/env python3.6

import sys

with open(sys.argv[2], 'w') as outfile:
    with open(sys.argv[1]) as infile:
        for line in infile:
            outfile.write(line)

Đã trả lời ngày 10 tháng 8 năm 2017 lúc 21:48Aug 10, 2017 at 21:48

Bruno Bronoskybruno BronoskyBruno Bronosky

63.1K11 Huy hiệu vàng154 Huy hiệu bạc139 Huy hiệu đồng11 gold badges154 silver badges139 bronze badges

1

Dự án Blaze đã đi một chặng đường dài trong 6 năm qua. Nó có một API đơn giản bao gồm một tập hợp con hữu ích của các tính năng gấu trúc.

Dask.DataFrame chăm sóc việc chunking trong nội bộ, hỗ trợ nhiều hoạt động song song và cho phép bạn xuất khẩu các lát trở lại gấu trúc dễ dàng cho các hoạt động trong bộ nhớ.

import dask.dataframe as dd

df = dd.read_csv('filename.csv')
df.head(10)  # return first 10 rows
df.tail(10)  # return last 10 rows

# iterate rows
for idx, row in df.iterrows():
    ...

# group by my_field and return mean
df.groupby(df.my_field).value.mean().compute()

# slice by column
df[df.my_field=='XYZ'].compute()

Đã trả lời ngày 22 tháng 1 năm 2018 lúc 20:51Jan 22, 2018 at 20:51

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

JPPJPPjpp

153K32 Huy hiệu vàng260 Huy hiệu bạc320 Huy hiệu đồng32 gold badges260 silver badges320 bronze badges

Đây là mã để tải các tệp văn bản ở bất kỳ kích thước nào mà không gây ra sự cố bộ nhớ. Nó hỗ trợ các tệp có kích thước gigabyteIt support gigabytes sized files

https://gist.github.com/iyvinjose/e6c1cb2821abd5f01fd1b9065cbc759d

Tải xuống tệp data_loading_utils.py và nhập nó vào mã của bạndata_loading_utils.py and import it into your code

cách sử dụng

import data_loading_utils.py.py
file_name = 'file_name.ext'
CHUNK_SIZE = 1000000


def process_lines(data, eof, file_name):

    # check if end of file reached
    if not eof:
         # process data, data is one single line of the file

    else:
         # end of file reached

data_loading_utils.read_lines_from_file_as_data_chunks(file_name, chunk_size=CHUNK_SIZE, callback=self.process_lines)

Phương thức Process_Lines là hàm gọi lại. Nó sẽ được gọi cho tất cả các dòng, với dữ liệu tham số đại diện cho một dòng của tệp tại một thời điểm. method is the callback function. It will be called for all the lines, with parameter data representing one single line of the file at a time.

Bạn có thể định cấu hình biến chunk_size tùy thuộc vào cấu hình phần cứng máy của bạn.CHUNK_SIZE depending on your machine hardware configurations.

Đã trả lời ngày 25 tháng 7 năm 2018 lúc 2:32Jul 25, 2018 at 2:32

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Iyvin Joseiyvin JoseIyvin Jose

6875 Huy hiệu bạc17 Huy hiệu đồng5 silver badges17 bronze badges

1

Còn cái này thì sao? Chia tệp của bạn thành các khối và sau đó đọc từng dòng, vì khi bạn đọc một tệp, hệ điều hành của bạn sẽ lưu trữ dòng tiếp theo. Nếu bạn đang đọc từng dòng tệp, bạn sẽ không sử dụng hiệu quả thông tin được lưu trong bộ nhớ cache.

Thay vào đó, hãy chia tệp thành các khối và tải toàn bộ khối vào bộ nhớ và sau đó thực hiện xử lý của bạn.

for line in open("log.txt"):
    do_something_with(line)
0

Đã trả lời ngày 25 tháng 10 năm 2017 lúc 0:30Oct 25, 2017 at 0:30

1

Cảm ơn bạn! Gần đây tôi đã chuyển đổi thành Python 3 và đã thất vọng khi sử dụng các đường đọc (0) để đọc các tệp lớn. Điều này đã giải quyết vấn đề. Nhưng để có được mỗi dòng, tôi đã phải thực hiện một vài bước bổ sung. Mỗi dòng được đi trước bởi một "B '" mà tôi đoán rằng nó ở định dạng nhị phân. Sử dụng "Giải mã (UTF-8)" đã thay đổi nó ASCII.

Sau đó, tôi phải loại bỏ một "= \ n" ở giữa mỗi dòng.

Sau đó, tôi chia các dòng ở dòng mới.

for line in open("log.txt"):
    do_something_with(line)
1

Dưới đây là mã bắt đầu ngay trên "Dữ liệu in" trong mã của Arohi.

Đã trả lời ngày 18 tháng 1 năm 2018 lúc 15:28Jan 18, 2018 at 15:28

Giải pháp tốt nhất tôi tìm thấy về điều này và tôi đã thử nó trên tệp 330 MB.

for line in open("log.txt"):
    do_something_with(line)
2

Trong đó line_length là số lượng ký tự trong một dòng. Ví dụ: "ABCD" có độ dài dòng 4.

Tôi đã thêm 2 chiều dài dòng để bỏ qua ký tự '\ n' và chuyển sang ký tự tiếp theo.

Đã trả lời ngày 2 tháng 5 năm 2020 lúc 12:46May 2, 2020 at 12:46

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Ali Sajjadali SajjadAli Sajjad

2.65922 huy hiệu bạc34 huy hiệu đồng22 silver badges34 bronze badges

Tôi nhận ra điều này đã được trả lời khá lâu trước đây, nhưng đây là cách thực hiện song song mà không giết chết bộ nhớ của bạn trên đầu (đó sẽ là trường hợp nếu bạn cố gắng bắn từng dòng vào nhóm). Rõ ràng trao đổi hàm readjson_line2 cho một cái gì đó hợp lý - nó chỉ để minh họa điểm ở đây!

Speedup sẽ phụ thuộc vào tệp và những gì bạn đang làm với từng dòng - nhưng trường hợp xấu nhất cho một tệp nhỏ và chỉ đọc nó với trình đọc JSON, tôi thấy hiệu suất tương tự với ST với các cài đặt bên dưới.

Hy vọng rằng hữu ích cho ai đó ngoài kia:

for line in open("log.txt"):
    do_something_with(line)
3

Đã trả lời ngày 2 tháng 3 năm 2021 lúc 13:36Mar 2, 2021 at 13:36

Amiga500Amiga500Amiga500

1.1631 Huy hiệu vàng6 Huy hiệu bạc9 Huy hiệu đồng1 gold badge6 silver badges9 bronze badges

Điều này có thể hữu ích khi bạn muốn làm việc song song và chỉ đọc các khối dữ liệu nhưng giữ cho nó sạch sẽ với các dòng mới.

for line in open("log.txt"):
    do_something_with(line)
4

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

Ahmad

66.5K17 Huy hiệu vàng108 Huy hiệu bạc136 Huy hiệu đồng17 gold badges108 silver badges136 bronze badges

Đã trả lời ngày 10 tháng 5 năm 2019 lúc 12:00May 10, 2019 at 12:00

Hướng dẫn how do i read a 100 gb file in python? - làm cách nào để đọc tệp 100 gb trong python?

AdamadamAdam

4592 Huy hiệu bạc15 Huy hiệu Đồng2 silver badges15 bronze badges

Làm cách nào để đọc tệp 100GB trong 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 lặp. Trình 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à 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 10GB trong Python?

Python cách nhanh nhất để đọc một tệp văn bản lớn (một số GB)..
# Tệp: readline-example-3.py ..
File = Open ("Sample.txt").
Trong khi 1:.
dòng = file.ReadLines (100000).
Nếu không dòng:.
break..
Đối với dòng trong dòng:.
vượt qua # làm điều gì đó ** Văn bản mạnh mẽ **.

Làm cách nào để tìm thấy các tệp lớn trong Python?

Tìm kiếm Python cho một chuỗi trong các tệp văn bản..
Nếu một tệp nhỏ, hãy đọc nó vào một chuỗi và sử dụng phương thức Find () để kiểm tra xem một chuỗi hoặc từ có có trong một tệp không.(...
Nếu một tệp lớn, hãy sử dụng MMAP để tìm kiếm một chuỗi trong một tệp.....
Tìm kiếm một chuỗi trong nhiều tệp ..
Tệp tìm kiếm cho một danh sách các chuỗi ..

Làm thế nào để Python đọc kích thước tệp?

Mô -đun HĐH Python có hàm Stat () trong đó chúng ta có thể chuyển tên tệp làm đối số.Hàm này trả về một cấu trúc tuple chứa thông tin tệp.Sau đó, chúng ta có thể lấy thuộc tính ST_SIZE của nó để có được kích thước tệp tính bằng byte.. This function returns a tuple structure that contains the file information. We can then get its st_size property to get the file size in bytes.