AttributeError:“list”对象没有“strip”属性

2024-04-25 15:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码导致attributeRor:“list”对象没有属性“strip”,我不知道如何修复它:

#!/usr/bin/env python
from __future__ import absolute_import, division, print_function
from itertools import groupby


DATA = [["Test", "A", "B01", 828288,  1,    7, 'C', 5],
        ["Test", "A", "B01", 828288,  1,    7, 'T', 6],
        ["Test", "A", "B01", 171878,  3,    7, 'C', 5],
        ["Test", "A", "B01", 171878,  3,    7, 'T', 6],
        ["Test", "A", "B01", 871963,  3,    9, 'A', 5],
        ["Test", "A", "B01", 871963,  3,    9, 'G', 6],
        ["Test", "A", "B01", 1932523, 1,   10, 'T', 4],
        ["Test", "A", "B01", 1932523, 1,   10, 'A', 5],
        ["Test", "A", "B01", 1932523, 1,   10, 'X', 6],
        ["Test", "A", "B01", 667214,  1,   14, 'T', 4],
        ["Test", "A", "B01", 667214,  1,   14, 'G', 5],
        ["Test", "A", "B01", 667214,  1,   14, 'G', 6]]


def iter_something(rows):
    key_names = ['type', 'name', 'sub_name', 'pos', 's_type', 'x_type']
    chr_key_names = ['letter', 'no']
    for keys, group in groupby(rows, lambda row: row[:6]):
        result = dict(zip(key_names, keys))
        result['chr'] = [dict(zip(chr_key_names, row[6:])) for row in group]
        yield result


def convert(val):
    constructors = [int, str]
    for c in constructors:
        try:
            return c(val)
        except ValueError:
            pass


def main():
    with open("/home/mic/tmp/test.txt") as f:
        parts = (line.split(',') for line in f)
        column = (part.strip() for part in parts)
        for object_ in iter_something(column):
            print(object_)


if __name__ == '__main__':
    main()

Tags: keynameintestimportfornamesmain
2条回答

parts = (line.split(',') for line in f)在创建具有拆分的列表时拆分:

parts = (line.strip().split(',') for line in f)

您已将行拆分为列:

parts = (line.split(',') for line in f)

然后尝试删除每个列列表:

column = (part.strip() for part in parts)

那不行。取而代之的是去掉每一列:

column = ([col.strip() for col in part] for part in parts)

您可能希望使用^{} module来执行从文件到数据行的转换,但是:

with open("/home/mic/tmp/test.txt", 'rb') as f:
    reader = csv.reader(f, skipinitialspace=True)
    for object_ in iter_something(reader):
        print(object_)

skipinitialspace选项确保删除分隔符后面的空格。每行末尾的一个换行符,当然要去掉。

相关问题 更多 >