[英]Reading csv file from specific row
我试图在找到“ X”时提取数据,并获取从该行到末尾的所有内容。 我的代码仅给我下面的行。 有没有一种方法可以在行中包含“ X”?
a = []
with open(file_path,'rU') as fp:
for i,line in enumerate(fp):
if "X" in line:
#print (i, line)
for line in fp:
a.append(line.split(' '))
print(a)
鉴于:
$ cat file.csv
line 1
line 2
line 3
line X
line 5
line 6
line 7
您可以在dropwhile期间使用itertools :
import itertools as it
with open(file_path,'rU') as fp:
a=[line.strip() for line in it.dropwhile(lambda l: 'X' not in l, fp)]
结果:
>>> a
['line X', 'line 5', 'line 6', 'line 7']
如果要在整个文件上使用enumerate
,则可以有一个在测试后将保持True
或False
状态的对象。 通常称为FlipFlop,它在仅逐行读取文件的同时用于在文件中查找标记非常有用:
class FlipFlop:
def __init__(self, start_state, func):
self.call=func
self.state = start_state
def __call__(self, st):
if self.call(st): self.state=not self.state
return self.state
with open(fn) as f_in:
ff=FlipFlop(False, lambda s: 'X' in s)
x_and_after=[(i, line.strip()) for i, line in enumerate(f_in) if ff(line)]
结果:
>>> x_and_after
[(3, 'line X'), (4, 'line 5'), (5, 'line 6'), (6, 'line 7')]
a = []
with open(file_path,'rU') as fp:
for i, line in enumerate(fp):
if 'X' in line:
print('FOUND X [{}]: {}'.format(i, line))
a.append(line.split(' '))
for j, line in enumerate(fp, start=i+1):
print('FOUND after X [{}]: {}'.format(j, line))
a.append(line.split(' '))
print(a)
找到“ X”后,打开文件的第二个循环在行上开始。 您可以添加“标志”并删除内部循环:
a = []
after_x = False
with open(file_path,'rU') as fp:
for i,line in enumerate(fp):
after_x = after_x or "X" in line
if after_x:
a.append(line.split(' '))
print(a)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.