0

我有这个扫描 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
4

3 回答 3

1

很难确切地弄清楚你想要什么,但我会尝试猜测。

也许您想a成为listCSV 中从第一列开始的 11 行中的一行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数组中而不是 alist中,则在此循环之后从列表构造数组比提前构造数组并尝试动态添加要容易得多。

于 2013-04-24T23:09:41.123 回答
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())
于 2013-04-24T23:10:52.097 回答
-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

希望这可以帮助!

于 2013-04-24T23:11:04.633 回答