我有一个带有一些模式的csv文件。我只想有选择地将行加载到python的csv reader类中。目前,csv只接受一个文件对象。有办法解决这个问题吗? 换句话说,我需要的是:
with open('filename') as f:
for line in f:
if condition(line):
record = csv.reader(line)
但是,目前,如果给定一行而不是文件对象,则csv类会失败。
答案 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]
```