![](/img/trans.png)
[英]Reading certain lines from a file in python without loading it in 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.