2013-03-22 61 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

相关问题