Python2.7:要解压的值太多 - 未知的列数

时间:2014-12-01 10:25:14

标签: python-2.7 strip unpack

我有一个文件,我想要解压缩并利用不同文件中的列。我遇到的问题是我要解压缩的文件在列数上有不同的行(例如,第1行可以有7列,第2行可以有15列)。

如何解压缩文件而不会收到错误“解压缩的值太多”?

filehandle3 = open ('output_steps.txt', 'r')
filehandle4 = open ('head_cluster.txt', 'w')
for line in iter(filehandle3):
    id, category = line.strip('\n').split('\t')
    filehandle4.write(id + "\t" + category + "\n")
filehandle3.close()
filehandle4.close()

任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分:1)

您应该单独提取值,如果存在,例如像这样:

for line in iter(filehandle3):
    values = line.strip('\n').split('\t')
    id       = values[0] if len(values) > 0 else None
    category = values[1] if len(values) > 1 else None
    ...

您还可以为此创建一个辅助函数:

def safe_get(values, index, default=None):
    return values[index] if len(values) > index else default

或使用try/except

def safe_get(values, index, default=None):
    try:
        return values[index]
    except IndexError:
        return default

并像这样使用它:

    category = safe_get(values, 1)

使用Python 3,如果行总是至少有你需要的元素,你可以使用

for line in iter(filehandle3):
    id, category, *junk = line.strip('\n').split('\t')

这会将第一个元素绑定到id,第二个元素绑定到category,其余元素绑定到junk