簡體   English   中英

從文件中讀取特定數量的行而不存儲在 memory 中?

[英]Reading a specific number of lines from a file without storing in memory?

我有數據需要使用 python 代碼讀取和提取特定塊,但文件可能有數千萬行長,而且太大而無法存儲在 memory 中,所以我只想提取我實際需要分析的數據。

文件格式如下:

4 # Number of lines per block
0 # Start of block 0
A line of data
A line of data
A line of data
A line of data
1 # Start of block 1
A line of data
A line of data
...

我遇到的問題是,一旦找到並將所需的特定塊讀入列表中,我的代碼就會繼續讀取和添加數據,直到文件末尾而不是該特定塊的末尾。

這是我到目前為止所擁有的:

required_block = 5
ilepath = file.txt
data = []

with open(filepath, 'r') as f:
    block_length = int(f.readline())
    for line in f:
        block = int(line)
        if block != required_block:
            for _ in range(block_length)
                next(f)
        else:
            break
    for line in f:
        data.append(line)

如果我嘗試在最后一個“for”循環中添加一個范圍,它將一遍又一遍地讀取當前行。

我哪里錯了?

編輯:為了澄清,我只希望最后一個“for”循環運行 <block_length> 次數。

如果您查看您的代碼,您的最后一個 for 循環是罪魁禍首。 無論如何,您都在告訴 append 一切。 在您的第一個 for 循環中,您實際上根本沒有 append 任何東西。 所以基本上在第一個循環中它只是遍歷數據,然后在第二個循環中它附加所有內容,因為 append 不在邏輯范圍內。

認為你想要的是這樣的:

for line in f:
        block = int(line)
        if block != required_block:
            next(f)
        else:
            for _ in range(block_length):
                data.append(line)

嘗試將最后一個循環更改為:

for _ in range(block_length):
    data.append(f.readLine())

逐行讀取文件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM