2012-05-23 29 views
7

我有一个CSV文件看起来像这样:是否可以使用read_csv来只读特定行?

TEST 
2012-05-01 00:00:00.203 ON 1 
2012-05-01 00:00:11.203 OFF 0 
2012-05-01 00:00:22.203 ON 1 
2012-05-01 00:00:33.203 OFF 0 
2012-05-01 00:00:44.203 OFF 0 
TEST 
2012-05-02 00:00:00.203 OFF 0 
2012-05-02 00:00:11.203 OFF 0 
2012-05-02 00:00:22.203 OFF 0 
2012-05-02 00:00:33.203 OFF 0 
2012-05-02 00:00:44.203 ON 1 
2012-05-02 00:00:55.203 OFF 0 

,不能摆脱"TEST"字符串。

是否可以检查一行是否以日期开始,只读取那些行吗?

回答

7
from cStringIO import StringIO 
import pandas 

s = StringIO() 
with open('file.csv') as f: 
    for line in f: 
     if not line.startswith('TEST'): 
      s.write(line) 
s.seek(0) # "rewind" to the beginning of the StringIO object 

pandas.read_csv(s) # with further parameters… 
+0

谢谢!这工作。 – user1412286

3

当您从csv.reader得到row,以及何时可以肯定的是,第一个元素是一个字符串,那么你可以使用

if not row[0].startswith('TEST'): 
    process(row) 
0

另一种选择,因为我只是碰到了这个问题也是:

import pandas as pd 
import subprocess 
grep = subprocess.check_output(['grep', '-n', '^TITLE', filename]).splitlines() 
bad_lines = [int(s[:s.index(':')]) - 1 for s in grep] 
df = pd.read_csv(filename, skiprows=bad_lines) 

它比@ eumiro的(阅读:可能不工作在Windows上)便携式少,需要读取文件的两倍,但具有的优点是您不必将整个文件内容存储在内存中。

你当然可以和Python中的grep做同样的事情,但它可能会变慢。

相关问题