2012-05-23 26 views
7

Tôi có một tập tin csv trông như thế này:Có thể sử dụng read_csv để chỉ đọc các dòng cụ thể không?

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 

và không thể thoát khỏi những "TEST" chuỗi.

Có thể kiểm tra xem một dòng có bắt đầu bằng một ngày không và chỉ đọc những dòng có thực hiện?

Trả lời

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

Cảm ơn! Những công việc này. – user1412286

3

Khi bạn nhận được row từ csv.reader, và khi bạn có thể chắc chắn rằng các yếu tố đầu tiên là một chuỗi, sau đó bạn có thể sử dụng

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

Một lựa chọn khác, vì tôi chỉ chạy vào vấn đề này cũng:

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) 

Đó là ít di động hơn @ của (đọc: có thể không hoạt động trên Windows) eumiro và đòi hỏi phải đọc các tập tin hai lần, nhưng có lợi thế là bạn không phải lưu trữ toàn bộ nội dung tập tin trong bộ nhớ.

Bạn có thể làm điều tương tự như grep trong Python, nhưng có lẽ nó sẽ chậm hơn.

Các vấn đề liên quan