2014-05-23 58 views
0

我必須加載100個數據文件,每個文件都有一個包含漸進編號的名稱:func_0.0.csv,func_0.1.csv,...,func_9.9.csvMatplotlib加載數據使用週期

dati01={} 
x1={} 
y1={} 
fig=pl.figure() 
ax1=fig.add_subplot(111) 

for count in range(0,99): 
nome_file = "func_%1.1f.csv" %(0.1*count) 
dati01[count] = np.loadtxt(nome_file) 
x1[count], y1[count]=dati01[count][:,0], dati01[count][:,1] 
ax1.scatter(x1[count],y1[count], s=0.01, edgecolor=(count/1600., count/900, count/760.), label='') 

的問題是解釋給我一個錯誤:

line 56, in <module> 
dati01[count] = np.loadtxt(nome_file) 
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 848, in loadtxt 
items = [conv(val) for (conv, val) in zip(converters, vals)] 
ValueError: invalid literal for float(): 33.6033.682817 

我解決不了的問題,任何人都可以幫助我嗎?

+0

您的文件中有不良數據。你必須在matplotlib加載之前清理它 – Gerrat

回答

0

在for循環中,通過打印出nome_file或類似的東西來跟蹤打開哪個文件。最後一個在程序失敗之前打開的文件是:

33.6033.682817 

它裏面。這不是一個有效的浮點數(沒有帶2個小數點的浮點數)。您需要更正每個文件中存在類似問題的數據。

0

這不是您的問題的答案,但您也可以使用globre包來讀取多個文件。這裏是我的代碼示例:

import glob 
import numpy as np 
import re 

file_list=glob.glob('./BeamDistri*.dat') 
file_list_length=len(file_list)  

number_regex=re.compile('_(\d+).') 

for i in np.arange(file_list_length): 
    file_beam=file_list[i] 
    result_search=number_regex.search(file_beam).group(1) 
    timestep=int(result_search) 
    data_beam=np.genfromtxt(file_list[i]) 
    t=np.append(t, timestep*dt); 


sorted_indices=np.argsort(t)