2013-05-01 63 views
1

我想用Python操縱一些數據,但有很多困難(因爲我仍然是一個新手)。我已經從其他問題/網站採取了一些代碼,但仍然不能得到我想要的。從Python中的一組數據文件中選擇特定的行

基本上我需要的是取一組數據文件,並從這些文件中的每一個的特定行中選擇數據,然後將其放入一個新文件中,以便我可以繪製它。

因此,要獲得數據成Python中,我試圖用放在首位:

data = [] 
path = C:/path/to/file 
for files in glob.glob(os.path.join(path, ‘*.*’)): 
    data.append(list(numpy.loadtxt(files, skiprows=34))) #first 34 rows aren't used 

這個曾經工作過非常適合我,但由於某些原因,它現在不會工作。任何可能的原因爲什麼可能是這種情況?

無論如何,繼續,這應該給我一個包含所有數據的2D列表。

接下來,我要選擇的每個數據集的某些行,可以這樣做使用:

x = list(xrange(30)) #since there are 30 files 

然後:

rowdata = list(data[i][some particular row] for i in x) 

這給了我包含特定值的列表來自每個導入文件的行。這部分似乎很好地工作。

最後,我想寫這個文件。我一直在嘗試:

f = open('path/to/file', 'w') 
    for item in rowdata: 
     f.write(item) 
f.close() 

但是我不斷收到錯誤。這裏有另一種方法嗎?

+0

什麼錯誤你看到的消息? – Talvalin 2013-05-01 14:48:03

回答

0

您已經使用numpy的加載文本,你可以用它來操縱它。

import numpy as np 
path = 'C:/path/to/file' 
mydata = np.array([np.loadtxt(f) for f in glob.glob(os.path.join(path, '*.*'))]) 

這將所有的數據加載到一個3D陣列:

mydata.ndim 
#3 

其中所述第一尺寸(軸)運行在文件中,第二過行,第三超過列:

mydata.shape 
#(number of files, number of rows in each file, number of columns in each file) 

所以,你可以通過

mydata[0,...] # equivalent to: mydata[0,:,:] 
訪問的第一個文件個

或特定部分的所有文件:

mydata[0,34,:] #the 35th row of the first file by 
mydata[:,34,:] #the 35th row in all files 
mydata[:,34,1] #the second value in the 34th row in all files 

要寫入文件:
說你想從所有文件寫只用了35行的新文件:

np.savetxt(os.join(path,'outfile.txt'), mydata[:,34,:]) 
+0

嘿,對於延遲響應抱歉。我嘗試使用askewchan提供的代碼,但它給出了一個錯誤,如「無法將字符串轉換爲浮點數」。這是因爲前34行包含字符串,所以我嘗試將其更改爲「... [np.loadtxt (f,skiprows = 34)...「現在我得到這個錯誤:」文件「」,第1行,在文件「C(python目錄)\ numpy \ lib \ npyio.py」,第783行,在loadtxt fh.next StopIteration「不知道這是什麼意思,感謝您的幫助和耐心。 – Jayden 2013-05-11 08:03:04

+1

@Jayden這可能意味着你的文件不夠長...此外,嘗試使用'skip_header = 34'而不是'skiprows = 34 '。 – askewchan 2013-05-11 12:39:08

+0

是的,這是問題所在,我在那裏有一個不是34行的文件,所以它被卡住了,導出代碼也像魅力一樣工作,謝謝,不過,現在別的東西讓我卡住了。幾乎直接複製了爲第一組數據工作的代碼行(我有3組),只改變路徑,並導入再次,但由於某種原因,它給了我一維數組而不是二維(每個文件只有1列)。結果類似於「array([array([data]),array([data]),... array([data])],dtype = object」。 – Jayden 2013-05-12 15:51:59

0

如果您只需從文件讀取並寫入文件,則可以使用open()。

爲了更好的解決方案,您可以使用linecache

相關問題