2013-03-22 30 views
2

好的,所以我正在學習Python。但對於我的學習,我必須做相當複雜的事情。我試圖運行一個腳本來分析excel文件中的數據。這是它的外觀:Python錯誤:需要多個值才能解壓

#!/usr/bin/python 
import sys 

#lots of functions, not relevant 

resultsdir = /home/blah 

filename1=sys.argv[1] 
filename2=sys.argv[2] 
out = open(sys.argv[3],"w") 

#filename1,filename2="CNVB_reads.403476","CNVB_reads.403447" 

file1=open(resultsdir+"/"+filename1+".csv") 
file2=open(resultsdir+"/"+filename2+".csv") 

for line in file1: 
    start.p,end.p,type,nexons,start,end,cnvlength,chromosome,id,BF,rest=line.split("\t",10) 
    CNVs1[chr].append([int(start),int(end),float(BF)]) 

for line in file2: 
    start.p,end.p,type,nexons,start,end,cnvlength,chromosome,id,BF,rest=line.split("\t",10) 
    CNVs2[chr].append([int(start),int(end),float(BF)]) 

這些都是在Excel文件中的數據列的標題,我想分裂他們,我甚至不知道從Excel文件使用數據時有必要。

#more irrelevant stuff 

out.write(filename1+","+filename2+","+str(chromosome)+","+str(type)+","+str(shared)+"\n") 

這就是它應該寫在我的輸出中,'shared'就是我計算出來的,其餘的已經在文件中了。

好了,現在我的問題,最後,當我打電話這樣的腳本:
蟒蛇script.py CNVB_reads.403476 CNVB_reads.403447 script.csv在我的殼

我收到以下錯誤信息:

start.p,end.p,type,nexons,start,end,cnvlength,chromosome,id,BF,rest=line.split("\t",10) 
ValueError: need more than 1 value to unpack 

我不知道什麼是與數據有關的意思......任何想法?

+0

這意味着你的行沒有11個由標籤分隔的值。它顯然只有一個 – jamylak 2013-03-22 11:42:11

+0

聲音像'line.split(「\ t」,10)'只返回一個元素的丟失。 – 2013-03-22 11:42:11

+3

您應該真的使用'csv'模塊來分割CSV(或者出於某種不合理的原因,使用擴展名爲.csv的錯誤標籤分隔文件)。 – geoffspear 2013-03-22 11:42:21

回答

4

line.split('\t', 10)調用沒有返回十一個元素。也許它是空的?

您可能想使用csv module來解析這些文件。

import csv 
import os 

for filename, target in ((filename1, CNVs1), (filename2, CNVs2)): 
    with open(os.path.join(resultsdir, filename + ".csv"), 'rb') as csvfile: 
     reader = csv.reader(csvfile, delimiter='\t') 
     for row in reader: 
      start.p, end.p = row[:2] 
      BF = float(row[8]) 
      target[chr].append([int(start), int(end), BF]) 
+0

我現在嘗試使用csv模塊,但我再次收到一個錯誤消息:解壓縮的值過多... – 2013-03-22 12:13:38

+0

@ user2112896:發生這種情況時,打印出「行」。 'try:start.py,end.p = row [:2]''除了ValueError:print「沒有足夠的值?行:」,行' – 2013-03-22 12:15:04

+0

@ user2112896:不要在循環中解壓行;您的文件在每行中有*多於* 5列,因此解壓縮將不起作用。爲什麼不用我的版本呢? – 2013-03-22 12:15:53

相關問題