[英]how to convert a txt file to a array python. “could not convert string to float”
我需要導入txt文件的數組值,但是當我打印以查看我的值時,出現此錯誤:“無法將字符串轉換為浮點數:vector(0.1013,0.2395,1.1926),vector(0.1276,0.2361,1.1760),向量(0.13952644965926353,0.23617897201269641,1.1760001652770353),向量(0.16723382973344353,0.23617897201269641,1.176000165277035“僅顯示數組的幾個值。關於我做錯了什么以及正確的方法是什么?
def load_files(self):
dlg = wx.FileDialog(None,message="Choose File",wildcard= 'Points (*.txt; *.csv)|*.txt;*.csv', defaultFile="",style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST|wx.FD_CHANGE_DIR)
if dlg.ShowModal() == wx.ID_CANCEL:
print ('buh cancelaste')
else:
filename=dlg.GetFilename()
f = open(filename)
data = f.read()
data = np.array(data).astype(float)
print(data)
files = wx.Button(pan, label='Load Coordinates', pos=(x1+158,570), size = (150,40))
files.Bind(wx.EVT_BUTTON, load_files)
txt文件。
向量(0.1013,0.2395,1.1926),向量(0.1276,0.2361,1.1760),向量(0.13952644965926353,0.23617897201269641,1.1760001652770353),向量(0.16723382973344353,0.23617897201269641,1.1760001652770353),向量(0.18306661834726065,0.23617897201269610760945769 ,1.1760001652770353),矢量(0.22264858988180353,0.22822011870140083,1.1760001652770353),矢量(0.23452318134216635,0.22822011870140083,1.1760001652770353)
向量(-3.22925576,0.78085742,8.2709313),向量(0.12270437,0.29943441,1.65709467),向量(0.1278586,0.09019178,1.24548948),向量(0.25600214,-0.04258577,0.6109198)
矢量(0.12795994,0.30532043,1.6896684),矢量(0.13624277,0.09229906,1.24548948),矢量(0.29656594,-0.08827312,0.69378916),矢量(0.19870717,-0.09120946,1.19266453)
錯誤消息表明傳遞給np.array
data
是以下形式的一個或多個字符串
vector(0.1013, 0.2395, 1.1926), vector(0.1276, 0.2361, 1.1760), vector(0.13952644965926353, 0.23617897201269641, 1.1760001652770353), vector(0.16723382973344353, 0.23617897201269641, 1.176000165277035
一長串。 您沒有做任何將其拆分為空格,逗號甚至換行符的操作。
使用astype(float)
嘗試將字符串轉換為float或float序列。 Python float(astr)
函數可與"0.1013"
類的字符串"0.1013"
,而不能用於包含多個數字的長字符串。 即使您將data
分為以下子字符串
vector(0.1013, 0.2395, 1.1926)
會有問題,因為vector
毫無意義。
您需要對這些文件行進行更多的分析。 您需要將它們拆分為幾行(例如readline()
),剝離\\n
,將其拆分為類似於vector()
塊,然后進一步將其拆分為每個數字一個的字符串。 換句話說,這樣的字符串列表將起作用:
In [848]: np.array(['0.1013', '0.2395', '1.1926'])
Out[848]:
array(['0.1013', '0.2395', '1.1926'],
dtype='<U6')
In [849]: np.array(['0.1013', '0.2395', '1.1926']).astype(float)
Out[849]: array([ 0.1013, 0.2395, 1.1926])
觀察data
是“ vector()”字符串時會發生什么:
In [852]: np.array('vector(0.1013, 0.2395, 1.1926)')
Out[852]:
array('vector(0.1013, 0.2395, 1.1926)',
dtype='<U30')
In [853]: np.array('vector(0.1013, 0.2395, 1.1926)').astype(float)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-853-413e30b24430> in <module>()
----> 1 np.array('vector(0.1013, 0.2395, 1.1926)').astype(float)
ValueError: could not convert string to float: 'vector(0.1013, 0.2395, 1.1926)'
astype(float)
不會在字符串中搜索看起來像數字的子字符串。 嘗試使用float('123 45')
及其變體。 float()
需要看起來完全像float或integer的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.