CSV文件到数组中

时间:2013-04-24 22:47:09

标签: python csv

我有一个扫描csv文件的脚本,如果第一个column == 200中的值将该行保存到数组中。

问题是,我需要在同一个数组中保存该行和接下来的10行。我可以将哪些内容添加到脚本中以便执行此操作?我尝试for row in len(10):但我收到错误。

p = csv.reader(open('file.csv'), delimiter=';')
a=[0]*2881
a = numpy.array(a, dtype=dict)
for row in p:
       if row[0]=="200":
          a=row
          break
print a

3 个答案:

答案 0 :(得分:1)

很难弄清楚你想要什么,但我会试着猜测。

也许您希望a成为CSV中11行的list,从第一列200开始的第一行开始:

p = csv.reader(open('file.csv'), delimiter=';')
for row in p:
    if row[0]=="200":
        a = [row] + list(itertools.islice(p, 10))
        break

英文:a是找到的行的列表,以及接下来10行的列表。

如果您希望将其存储在numpy数组而不是list中,则在此循环之后从列表构造数组要比预先构造数组更容易并尝试即时添加。

答案 1 :(得分:0)

也许是这样的?

#!/usr/local/pypy-1.9/bin/pypy

import csv

def gen():
    with open('file.csv', 'rb') as file_:
        reader = csv.reader(file_, delimiter=';')
        state = 'no feed'
        for row in reader:
            if row[0]=="200":
                yield row
                state = 'feed'
                count = 1
            elif state == 'feed':
                if count < 10:
                    yield row
                    count += 1
                if count >= 10:
                    state = 'no feed'
                    count = 0

print list(gen())

答案 2 :(得分:-1)

试一试:

p = csv.reader(open('file.csv'), delimiter=';')

# walk through p, and look for '200' 
for i, row in enumerate(p):
    if row[0] == '200':
        my_array = numpy.array([x for x in p[i:i+11])

应返回一个包含您感兴趣的行的数组,以及下一个10

希望这有帮助!