AttributeError:' GzipFile'对象没有属性' next'

时间:2017-04-11 22:00:19

标签: python python-3.x

我将非常感谢你的帮助。我从我的代码的这一部分得到了一个错误信息,我想用它来阐明克罗恩病和溃疡性结肠炎的差异表达基因,来自affymetrix微阵列分析(原始数据链接是{ {3}})。但是当我运行这段代码时:

import gzip
import numpy as np

"""
Read in a SOFT format data file.  The following values can be exported:

GID : A list of gene identifiers of length d
SID : A list of sample identifiers of length n
STP : A list of sample descriptions of length d
X   : A dxn array of gene expression values
"""

fname = "../Anchang Charles/GDS1615_full.soft.gz"
with gzip.open(fname) as fid:
    SIF = {}
    for line in fid:
        if line.startswith(line, len("!dataset_table_begin")):
            break
        elif line.startswith(line, len("!subject_description")):
            subset_description = line.split("=")[1].strip()
        elif line.startswith(line, len("!subset_sample_id")):
            subset_ids = [x.strip() for x in subset_ids]
            for k in subset_ids:
                SIF[k] = subset_description
                  #.next().split("\t")
    SID = fid.next().split("\t")
    I = [i for i,x in enumerate(SID) if x.startswith("GSM")]
    SID = [SID[i] for i in I]
    STP = [SIF[k] for k in SID]

我收到一条错误消息,上面写着

追踪(最近一次呼叫最后一次):

文件"",第1行,in     runfile(' C:/ Users / Anchang Charles / new affymetrix.py',wdir =' C:/ Users / Anchang Charles')

文件" C:\ Anaconda \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py",第866行,在runfile中     execfile(filename,namespace)

文件" C:\ Anaconda \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py",第102行,在execfile中     exec(compile(f.read(),filename,' exec'),命名空间)

文件" C:/ Users / Anchang Charles / new affymetrix.py",第1行,in     来自affymetrix导入X,GID,STP,SID,UC,CD

文件" C:\ Users \ Anchang Charles \ affymetrix.py",第26行,in     SID = fid.next()。split(" \ t")

AttributeError:' GzipFile'对象没有属性' next'

1 个答案:

答案 0 :(得分:3)

在Python 3中,iterator.next()已替换为iterator.__next__(),但您应该使用内置的next函数调用它,如下所示:

next(iterator)

所以试试:

next(fid).split("\t")

PEP 3114

中详细了解相关信息

改变背后的推理的关键:

  

使用双下划线为名称创建单独的命名空间   这是Python语言定义的一部分,所以程序员   可以自由创建以...开头的变量,属性和方法   字母,不用担心与有名字的名字无声地相撞   语言定义的目的。 (与保留关键字冲突仍然是一个   关注,但至少会立即产生语法错误。)

     

迭代器上的下一个方法的命名是一个例外   惯例。代码无处包含对下一个的显式调用   但是,这种方法的存在可以使这种方法无声地受到影响   方法。因此,这个PEP建议迭代器应该有一个   __next__方法而不是next方法(语义没有变化)。