以下代码导致AttributeError:’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()
您已将行分为几列:
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)
但是,您可能想使用该csv模块来完成从文件到数据行的转换:
csv
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选项确保删除定界符后紧跟的空格。当然,每行末尾的换行符也会被删除。
skipinitialspace