&引用;“值太多,无法解包”;在python中汇总大文本文件时出错

&引用;“值太多,无法解包”;在python中汇总大文本文件时出错,python,file,valueerror,iterable-unpacking,Python,File,Valueerror,Iterable Unpacking,我有两个选项卡分隔的文本文件。其中一个称为major,另一个称为minor。以下是文件的两个小示例: 专业: chr1 + 1071396 1271396 LOC chr12 + 1101483 1121483 MIR200B chr1 1071496 1071536 1 chr1 1071536 1071566 0 chr1 1073566 1073366 1 chr12 1101487 1101516 0 chr12 1101625 110167

我有两个
选项卡分隔的文本文件
。其中一个称为
major
,另一个称为
minor
。以下是文件的两个小示例:

专业

chr1    +   1071396 1271396 LOC
chr12   +   1101483 1121483 MIR200B
chr1    1071496 1071536 1
chr1    1071536 1071566 0
chr1    1073566 1073366 1
chr12   1101487 1101516 0
chr12   1101625 1101671 1
次要

chr1    +   1071396 1271396 LOC
chr12   +   1101483 1121483 MIR200B
chr1    1071496 1071536 1
chr1    1071536 1071566 0
chr1    1073566 1073366 1
chr12   1101487 1101516 0
chr12   1101625 1101671 1
我想从这两个文件中创建一个新文件。事实上,我必须按照以下步骤获得最终文件:

step1
:将
major
文件中
第3列和第4列之间的差异划分为
100
。在这一步中,我从主文件创建一个新文件,其中的行数是主文件中行数的100倍。在这个新文件中,将有2个更改

1st: columns 3 and 4 will be changed
2nd: I will add a new column called part (in this file that would be part 1 to part 100 per row in major file)



(1071396−1271396)÷100 = 2000 ----> this would be the new difference between columns 3 and 4 

chr1    +   1071396 1073396 LOC LOC_part1
chr1    +   1073396 1075396 LOC LOC_part2
.
.
.
chr1    +   1269396 1271396 LOC LOC_part100
chr12   +   1101483 1101683 MIR200B MIR200B_part1
chr12   +   1101683 1101883 MIR200B MIR200B_part2
.
.
.
chr12   +   1121283 1121483 MIR200B MIR200B_part100
从现在起,这个新文件将作为下一步的主要文件。我把它命名为新专业

step2
:在以下条件下,计算次要文件中与新的\u主要文件中的每一行相匹配的行数:

A) column 1 in minor file == column 1 in new_major
and
B) (column3 of new_major) <= (column2 of minor file) <= (column4 of new_major)
and
C)(column3 of new_major) <= (column3 of minor file) <= (column4 of new_major)
我编写了以下代码以获得预期的输出,但它给出了一个错误。错误在代码后面

major = open('major.txt', 'rb')
minor = open('minor.txt', 'rb')

minor = []
for line in minor:
    minor.append(line)

major = []
for line in major:
    major.append(line)


new_major = []
for i in major:
    percent = (i[3]-i[2])/100
    for j in percent:
        new_major.append(i[0], i[1], i[2], i[2]+percent, i[4], i[4]_'part'percent[j])


new_major, minor = ([l.split() for l in d.splitlines()] for d in (new_major, minor))

for name_major, sign, low, high, note in major:
    parts = list(range(int(low), int(high) + 1, (int(high) - int(low)) // 100))
    for part, (low, high) in enumerate(zip(parts, parts[1:]), 1):
        count = sum(1 for name_minor, n1, n2, _ in minor if name_major == name_minor and all(low <= int(n) <= high for n in (n1, n2)))
        print('\t'.join((name_major, sign, str(low), str(high), note, '%s_part%d' % (note, part), str(count))))
major=open('major.txt','rb')
minor=open('minor.txt','rb')
小调=[]
小调线路:
小调。追加(行)
专业=[]
对于大调线路:
少校。追加(行)
新大学专业=[]
我主修:
百分比=(i[3]-i[2])/100
对于j,以百分比表示:
新的(i[0],i[1],i[2],i[2]+百分数,i[4],i[4](部分百分数[j])
新大调,小调=([l.split()表示d中的l.splitlines()]表示d中的d(新大调,小调))
大调名称、符号、低、高、大调注释:
零件=列表(范围(整数(低)、整数(高)+1,(整数(高)-整数(低))//100)
对于枚举中的部件(低、高)(zip(部件,部件[1:]),1):
计数=和(1表示名称\次要,n1,n2,如果名称\次要==名称\次要和全部(低>名称\主要,符号,低,高,注意主要:
…零件=列表(范围(整数(低),整数(高)+1,(整数(高)-
int(低)//100)
…对于枚举中的部件(低、高)(zip(部件,部件[1:]),1):
…计数=总和(1表示名称,n1,n2,如果

name_major==name_minor and all(low我认为您想要解包
new_major
,而不是
major
,后者只是python文件开头的文件读取器

for name_major, sign, low, high, note in new_major:

确保还使用
file\u object.close()关闭文件
发布资源。

谁批准了这一编辑?@DinkoPehar:OP可以编辑而不必审阅。感谢您捕捉到这一点。@elly:这被认为是故意破坏行为。当您发布问题时,它属于该网站。如果有人试图回答它,您不能放弃该人的努力。如果存在IP或类似问题,请为什么不能留在这里,联系公司,他们可以从系统中删除帖子。