2016-11-03 62 views
-1

我在這裏使用python中的'split'對這裏的所有信息感到非常困惑。基本上我想編寫一個打開電子表格的代碼(其中有兩列),我寫的函數將使用第一列作爲x,第二列作爲y,然後將它繪製在x-y平面中。在Excel中使用python分割得到兩個參數

我想我會用line.splitlines在Excel中每一行切成(X,Y),但我不斷收到

'ValueError: need more than 1 value to unpack' 
  • 我不知道這是什麼意思?

下面是我到目前爲止已經寫的,(XDIR是我的問題的不同聲部的初始條件):

def plotMo(filename, xdir): 
    infile = open(filename) 
    data = [] 
    for line in infile: 
     x,y = line.splitlines() 
     x = float(x) 
     y = float(y) 
     data.append([x,y]) 
    infile.close() 
    return data 
plt.plot(x,y) 

例如與

0  0.049976 
0.01 0.049902 
0.02 0.04978 
0.03 0.049609 
0.04 0.04939 
0.05 0.049123 
0.06 0.048807 

我會希望我的飛機上的第一個點是(0,0.049976),第二個圖是(0.01,0.049902)。

回答

1

x,y = line.splitlines()嘗試將當前行分成幾行。

由於splitlines只返回1個元素,因爲python無法找到指定給y的值,所以出現錯誤。

你想要的是x,y = line.split()這將根據一個或多個空格分割線(如會做),如果沒有指定參數。

但是這取決於格式的:如果有空白行,你會得到在某個時候「解包」的問題,所以是安全的,並跳過畸形行,寫:

items = line.split() 
if len(items)==2: x,y = items 

總而言之了起來,更Python,短&編寫程序的更安全的方法是:

def plotMo(filename): 
    with open(filename) as infile: 
     data = [] 
     for line in infile: 
      items = line.split() 
      if len(items)==2: 
       data.append([float(e) for e in items]) 
    return data 

(也許它可以凝聚更多,但是這是很好的初學者)我最初使用

+0

'X,Y = line.split()'但它給出了相同的錯誤。 – Emma

+0

看到我的編輯。如果你的文件包含一個空白行(例如:最後,這是很常見的),你必須將它過濾出來,就像我剛剛做的那樣。 –

+0

現在你用更多pythonic的方式它說'ValueError:不能將字符串轉換爲浮動' - 這是一個相關的問題或不同的問題 – Emma