我将非常感谢你的帮助。我从我的代码的这一部分得到了一个错误信息,我想用它来阐明克罗恩病和溃疡性结肠炎的差异表达基因,来自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'
答案 0 :(得分:3)
在Python 3中,iterator.next()
已替换为iterator.__next__()
,但您应该使用内置的next
函数调用它,如下所示:
next(iterator)
所以试试:
next(fid).split("\t")
中详细了解相关信息
改变背后的推理的关键:
使用双下划线为名称创建单独的命名空间 这是Python语言定义的一部分,所以程序员 可以自由创建以...开头的变量,属性和方法 字母,不用担心与有名字的名字无声地相撞 语言定义的目的。 (与保留关键字冲突仍然是一个 关注,但至少会立即产生语法错误。)
迭代器上的下一个方法的命名是一个例外 惯例。代码无处包含对下一个的显式调用 但是,这种方法的存在可以使这种方法无声地受到影响 方法。因此,这个PEP建议迭代器应该有一个
__next__
方法而不是next
方法(语义没有变化)。