从指定文件读取csv文件

2024-05-08 21:46:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在找到“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)

Tags: 数据path代码in内容forruwith
3条回答

给出:

$ cat file.csv
line 1
line 2
line 3
line X
line 5
line 6
line 7

您可以使用itertools dropwhile

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,您可以有一个对象在测试后保持TrueFalse状态。通常称为触发器,用于查找文件中的标记,而只逐行读取文件:

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)

相关问题 更多 >