用线选择性地喂python csv类

时间:2016-10-04 10:40:59

标签: python csv

我有一个带有一些模式的csv文件。我只想有选择地将行加载到python的csv reader类中。目前,csv只接受一个文件对象。有办法解决这个问题吗? 换句话说,我需要的是:

with open('filename') as f:
    for line in f:
        if condition(line):
            record = csv.reader(line)

但是,目前,如果给定一行而不是文件对象,则csv类会失败。

5 个答案:

答案 0 :(得分:3)

来自figure docstring:

  

csvfile 可以是任何支持迭代器协议的对象,并在每次调用csv.reader方法时返回一个字符串

您可以使用仅生成所选行的生成器迭代器提供__next__()

csv.reader

答案 1 :(得分:1)

import shlex
lex = shlex.shlex('"sreeraag","100,ABC,XYZ",112',',', posix=True)
lex.whitespace += ','
lex.whitespace_split = True
print list(lex)

产量

['sreeraag', '100,ABC,XYZ', '112']

答案 2 :(得分:1)

要将文件作为流读取,您可以使用此功能。

io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)

答案 3 :(得分:0)

找到一个解决方案:由于csv需要支持__next __()的对象,我使用 StringIO 类将字符串转换为StringIO对象,后者又处理__next __()并每次返回一行csv读者课。

with open('filename') as f:
for line in f:
    if condition(line):
        record = csv.reader(StringIO.StringIO(line))

答案 4 :(得分:0)

```

with open("xx.csv") as f:
    csv = f.readlines()
    print(csv[0])

```

→_→生命短暂,你需要大熊猫

pip install pandas

```

import pandas as pd
df = pd.read_csv(filepath or url)
df.ix[0]
df.ix[1]
df.ix[1:3]

```