cuốn sách gpt4 ai đã làm

Xử lý tệp văn bản lớn bằng trình tạo python

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 12:26:29 26 4
mua khóa gpt4 Nike

Tôi mới sử dụng trình tạo và đã đọc một số bài nhưng cần một số trợ giúp để xử lý các tệp văn bản lớn thành các khối. Tôi biết chủ đề này đã được đề cập nhưng phần giải thích về mã ví dụ rất hạn chế và rất khó sửa đổi mã nếu không hiểu chuyện gì đang xảy ra.

Vấn đề của tôi khá đơn giản, tôi có một loạt tệp văn bản lớn chứa dữ liệu giải trình tự bộ gen của con người theo định dạng sau:

chr22 1 0
chr22 2 0
chr22 3 1
chr22 4 1
chr22 5 1
chr22 6 2

Độ dài tệp dao động từ 1Gb đến ~ 20Gb, quá lớn để đọc vào RAM. Vì vậy, tôi muốn đọc các hàng trong một khối/vùng chứa 10000 hàng cùng một lúc để tôi có thể thực hiện các phép tính trên cột cuối cùng của các kích thước vùng chứa này.

Dựa trên liên kết này đâyTôi đã viết như sau:

def read_large_file(file_object):
"""Chức năng tạo để đọc một tệp lớn một cách lười biếng."""

bin_size=5000
bắt đầu=0
kết thúc=bắt đầu+bin_size

# Đọc một khối từ file: data
while True:
dữ liệu = file_object.readlines(end)
nếu không phải là dữ liệu:
break
bắt đầu=bắt đầu+bin_size
end=end+bin_size
dữ liệu năng suất


def process_file (đường dẫn):

thử:
# Mở kết nối tới tập tin
với open(path) là file_handler:
# Tạo đối tượng tạo cho file: gen_file
cho khối trong read_large_file(file_handler):
in (khối)
# khối quy trình

ngoại trừ (IOError, OSError):
print("Lỗi mở/xử lý file")
trở lại

nếu __name__ == '__main__':
path='C:/path_to/input.txt'
tiến trình_file (đường dẫn)

Trong "process_block", tôi mong đợi đối tượng "khối" được trả về là danh sách 10000 phần tử, nhưng thực tế không phải vậy? Danh sách đầu tiên có 843 phần tử. Cái thứ hai là 2394 phần tử?

Tôi muốn trả về hàng "N" trong một khối nhưng tôi không hiểu chuyện gì đang xảy ra ở đây?

giải pháp này đâyCó vẻ như nó có thể hữu ích nhưng tôi vẫn không hiểu cách sửa đổi nó để đọc N hàng cùng một lúc?

cái nàyđâyCũng có vẻ là một giải pháp rất tốt, nhưng một lần nữa, không có đủ giải thích cơ bản để tôi hiểu đủ để sửa đổi mã.

Thực sự đánh giá cao sự giúp đỡ nào?

câu trả lời hay nhất

Thay vì sử dụng offset từ tệp, hãy thử xây dựng từ một vòng lặp và tạo danh sách 10000 phần tử:

def read_large_file(file_handler, block_size=10000):
khối = []
cho dòng trong file_handler:
block.append(line)
nếu len(block) == block_size:
khối năng suất
khối = []

# đừng quên nhường khối cuối cùng
nếu chặn:
khối năng suất

với open(path) là file_handler:
cho khối trong read_large_file(file_handler):
in (khối)

Về python - xử lý các tệp văn bản lớn bằng trình tạo python, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/49752452/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress