2013-07-18 56 views
2

我正在努力獲取字符串值到Python中的數組。我有一個文件,大約3萬項長,每一行看起來是這樣的:在csv中將字符串條目寫入python中的數組?

0R1,SN = 0.3M,SM = 0.7M,SX = 1.5M

我不需要0R1部分;我需要的只是一個數組中的所有Sn值,另一個數組中的Sm值以及另一個數組中的Sx值(當然,我還沒有弄清楚我將如何從數據串中獲取數值,但我會在稍後考慮)。我想現在我正在嘗試創建一個字符串數組。

這裏是我的代碼:

fname = '\\pathname...\\WXT51003.txt' 
f1 = open(fname, 'r') 

import csv 
import numpy 
from numpy import zeros 
reader = csv.reader(f1) 
Max = zeros((29697,1), dtype = numpy.str) 
Mean = zeros((29697,1), dtype = numpy.str) 
Min = zeros((29697,1), dtype = numpy.str) 
for i, row in enumerate(reader): 
    Min[i] = row[1] 
    Mean[i] = row[2] 
    Max[i] = row[3] 

f1.close() 
print Min[0:10] 

print語句的輸出是每一行與「S」的數組。我如何讓它讀取整個字符串,而不僅僅是第一個字符?

+0

使用一個「S8」dtype或無論你需要你的字符串...或使用dtype.object或任何...默認情況下它將成爲一個len1字符串類型...或不使用numpy(因爲你正在處理字符串無論如何) –

+0

@JoranBeasle你會工作,如果不同的行有不同的字符串長度?例如,如果我有Sn = 0.3M,那麼我有一個7的字符串長度,但如果它是Sn = 10.1M,那麼它是一個不同的字符串長度。 –

+0

作爲lng,因爲你將它設置爲最大長度(請參閱關於dtypes的numpy文檔) –

回答

3
reader = csv.reader(f1) 
rows = list(reader) 
cols = zip(*rows) 
Min = cols[1] 
Mean = cols[2] 
Max = cols[3] 


# or if you really want numpy.arrays 
Min = numpy.array(cols[1]) #dtype will be auto-assigned 
Mean = numpy.array(cols[2]) #dtype will be auto-assigned 
Max = numpy.array(cols[3]) #dtype will be auto-assigned 

是,如果你需要使用numpy的,然後使用「S8」的D型或不過,我會怎麼做...(不使用numpy的這個......至少目前還沒有)

大,你需要你的字符串......或使用dtype.object或其他...默認情況下,它將成爲一個len1字符串類型......但我真的看到沒有理由在這裏使用numpy根據您的代碼片段

+1

我會堅持OP的命名。在這裏,你掩蓋了Python內建的'min()'和'max()'函數。 –

+0

哎呀我的壞...(修正) –

+0

好的答案。或者你可以重寫到在Python 3中工作的oneliner'_,Min,Mean,Max = zip(* csv.reader(f1))'。 – 2013-07-18 23:33:55