2012-04-02 72 views
1

我試圖用rec2csv導出一個recarray到csv文件,以便以後可以用csv2rec檢索它。問題在於rec2csv在每行之間以空行導出,因此csv2rec稍後將無法讀取它。我怎樣才能解決這個問題與函數rec2csv?rec2csv用行之間的空行導出

基本上,我想要做的是這樣的:

ticker = 'GOOG' 
startdate = datetime.date(2011,1,1) 
enddate = datetime.date.today() 
fh = finance.fetch_historical_yahoo(ticker, startdate, enddate) 
r = mlab.csv2rec(fh); fh.close() 
r.sort() 

有人計算過,

fl = open(r'J:\export.csv', 'w') 
mlab.rec2csv(r,fl); fl.close() 

然後,我希望能夠與再次導入此文件:

ff = mlab.csv2rec('J:\\export.csv') 

這給出了一個錯誤消息(IndexError:列表索引超出範圍),因爲行之間有空行。

+1

它不應該做的是...什麼是您的數據是什麼樣子?你有一個在其中有換行符的字符串數組(或字段)嗎?順便說一句,你所指的功能不是numpy功能。他們是matplotlib函數。 – 2012-04-02 23:28:53

+0

我正在嘗試使用csv2rec從雅虎財務中提取股票數據,並將其與rec2csv一起另存爲csv文件。當我這樣做,這個文件看起來是這樣的: \ n 日期,開盤價,最高價,最低價,收盤價,成交量,adj_close \ n 2011-01-03,49.399999999999999,50.090000000000003,49.100000000000001,49.899999999999999,12745700,49.43 \ n 2011-01-04,50.140000000000001,50.829999999999998,50.100000000000001,50.829999999999998,20270600,50.350000000000001 \ n 2011-01-05,50.369999999999997,51.649999999999999,50.369999999999997,51.560000000000002,17732400,51.07 \ n 我不知道如何消除每個數據之間的空行。 – catun 2012-04-03 09:04:29

+0

你能告訴我們一個可重複的例子嗎? (或者更多的你在做什麼,至少?) – 2012-04-03 13:54:30

回答

1

我猜這是因爲你沒有以二進制模式打開文件。 rec2csv使用內置csv模塊,該模塊預計在Windows上以'wb'模式打開文件。

一個簡單的解決方案是隻傳入文件名,而不是手動打開和關閉文件。

因此,無論做:

mlab.rec2csv(r, 'J:\\export.csv') 

或做:

with open('J:\\export.csv', 'wb') as outfile: 
    mlab.rec2csv(r, outfile) 
+0

我收到一條消息: 文件「C:\ Python32 \ lib \ site-packages \ matplotlib \ mlab.py」,行2656,在rec2csv writer.writerow(頭文件) TypeError:'str'不支持緩衝區接口。 這與python版本有關,因爲我使用Python 3和matplotlib這個版本。 – catun 2012-04-06 16:01:38