使用 python 从文本文件中提取特定行
Extract specific lines from text file using python
我有一个大文本文件,我想使用数组提取特定行
这是行数数组
[176, 595, 1001, 1377, 1736, 2091, 2459, 2860, 3318, 3746, 4179, 4601]
所以我想提取这行以及之前的 100 行和之后的 100 行
例如:从第 76 行提取到第 276 行并删除第 1 到 75 行以及从 277 到 494 并从第 495 行提取到第 695 行
谢谢!
**#更新*
这是我的新代码
它工作正常但问题输出打印行号不是行中的值
import sys
sys.stdout = open('log.txt', 'w')
lineArray=[176,595,1001,1377,1736,2091,2459,2860,3318,3746,4179,4601]
with open('output.txt', 'w') as output:
fp = open("ecg.txt")
fileLines = {}
for i, line in enumerate(fp):
fileLines[i] = line
for lineNo in lineArray:
for i, line in fileLines.iteritems():
if i <= (lineNo + 100) and i >= (lineNo - 100):
print(i)
#output.write(line)
已解决
import sys
sys.stdout = open('log.txt', 'w')
lineArray=[369,1133,1908,2709,3570,4469,5336,6165,6931,7662,8354,9021,9667,10330,11016,11893,12811,13708,14602,15498,16388,17252,18060,18876,19683,20455,21259,22057,22900,23796,24640,25486,26287,27073,27801,28516,29229,29948,30660,30800,31369,32079,32907,33665,34389,35087,35782,36493,37282,38077,38862,39610,40321,41004,41676,42340,43013,43740,44594,45513,46399,47268,48243,49211,50198,51147,52119,53174,54241,55202,56098,57012,57992,59019,60036,60968,61867,62796,63681,64520,65357]
with open('output.txt', 'w') as output:
fp = open("ecg.txt")
fileLines = {}
for i, line in enumerate(fp):
fileLines[i] = line
for lineNo in lineArray:
for i, line in fileLines.iteritems():
if i <= (lineNo + 185) and i >= (lineNo - 185):
print(line)
#output.write(line)
如果您不想将所有文件加载到内存中,您可以使用下面的方法并在结果文件中写入所需的行:
with open('result', 'w') as output:
fp = open("input")
for lineNo in lineArray:
for i, line in enumerate(fp):
if i < lineNo + MARGIN and i > lineNo - MARGIN :
output.write(line)
fp.close()
然后您可以从磁盘中删除初始文件:
import os
os.remove('input')
我有一个大文本文件,我想使用数组提取特定行
这是行数数组
[176, 595, 1001, 1377, 1736, 2091, 2459, 2860, 3318, 3746, 4179, 4601]
所以我想提取这行以及之前的 100 行和之后的 100 行
例如:从第 76 行提取到第 276 行并删除第 1 到 75 行以及从 277 到 494 并从第 495 行提取到第 695 行
谢谢!
**#更新*
这是我的新代码
它工作正常但问题输出打印行号不是行中的值
import sys
sys.stdout = open('log.txt', 'w')
lineArray=[176,595,1001,1377,1736,2091,2459,2860,3318,3746,4179,4601]
with open('output.txt', 'w') as output:
fp = open("ecg.txt")
fileLines = {}
for i, line in enumerate(fp):
fileLines[i] = line
for lineNo in lineArray:
for i, line in fileLines.iteritems():
if i <= (lineNo + 100) and i >= (lineNo - 100):
print(i)
#output.write(line)
已解决
import sys
sys.stdout = open('log.txt', 'w')
lineArray=[369,1133,1908,2709,3570,4469,5336,6165,6931,7662,8354,9021,9667,10330,11016,11893,12811,13708,14602,15498,16388,17252,18060,18876,19683,20455,21259,22057,22900,23796,24640,25486,26287,27073,27801,28516,29229,29948,30660,30800,31369,32079,32907,33665,34389,35087,35782,36493,37282,38077,38862,39610,40321,41004,41676,42340,43013,43740,44594,45513,46399,47268,48243,49211,50198,51147,52119,53174,54241,55202,56098,57012,57992,59019,60036,60968,61867,62796,63681,64520,65357]
with open('output.txt', 'w') as output:
fp = open("ecg.txt")
fileLines = {}
for i, line in enumerate(fp):
fileLines[i] = line
for lineNo in lineArray:
for i, line in fileLines.iteritems():
if i <= (lineNo + 185) and i >= (lineNo - 185):
print(line)
#output.write(line)
如果您不想将所有文件加载到内存中,您可以使用下面的方法并在结果文件中写入所需的行:
with open('result', 'w') as output:
fp = open("input")
for lineNo in lineArray:
for i, line in enumerate(fp):
if i < lineNo + MARGIN and i > lineNo - MARGIN :
output.write(line)
fp.close()
然后您可以从磁盘中删除初始文件:
import os
os.remove('input')