簡體   English   中英

如何將txt文件轉換為數組python。 “無法將字符串轉換為浮點數”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM