2012-05-23 53 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做同樣的事情,但它可能會變慢。

相關問題