Python 属性错误:';gzip文件';对象没有属性';下一个';
我将非常感谢你的帮助。下面我从代码的这一部分得到一条错误信息,我想用它来阐明在克罗恩病和溃疡性结肠炎条件下的差异表达基因,来自affymetrix微阵列分析(原始数据链接为)。但当我运行此代码时:Python 属性错误:';gzip文件';对象没有属性';下一个';,python,python-3.x,Python,Python 3.x,我将非常感谢你的帮助。下面我从代码的这一部分得到一条错误信息,我想用它来阐明在克罗恩病和溃疡性结肠炎条件下的差异表达基因,来自affymetrix微阵列分析(原始数据链接为)。但当我运行此代码时: 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
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行,在
运行文件('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(文件名、命名空间)
文件“C:\Anaconda\lib\site packages\spyder\utils\site\sitecustomize.py”,第102行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/Anchang Charles/new affymetrix.py”,第1行,在
从affymetrix导入X、GID、STP、SID、UC、CD
文件“C:\Users\Anchang Charles\affymetrix.py”,第26行,在
SID=fid.next().split(“\t”)
AttributeError:'GzipFile'对象没有属性'next'在Python 3中,
迭代器。next()
已替换为迭代器。
,但您应该使用内置的next
函数调用它,如下所示:
next(iterator)
因此,请尝试:
next(fid).split("\t")
阅读更多关于它的文章
这一变化背后的原因关键是:
使用双下划线会为名称创建一个单独的名称空间
这是Python语言定义的一部分,因此程序员
可以自由创建以
字母,不必担心会与具有
语言定义的目的。(与保留关键字冲突仍然是一个问题
问题,但至少这会立即产生语法错误。)
迭代器上下一个方法的命名是一个例外
惯例。不包含对下一个函数的显式调用的代码
尽管如此,方法仍然会受到此类事件的影响
方法。因此,本PEP建议迭代器应具有
\uuuuuuuuuuuuuuuu
方法,而不是next
方法(语义没有变化)
感谢您的回复…替换为下一个(fid)。拆分(“\t”)将生成此错误消息:StopIteration@Charles这增加了使代码2/3兼容的额外好处…替换为:fid.\uuuu next\uuuu().split(“\t”)给予:StopIteration@Charles不要直接使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但是它给了您StopIteration
,因为迭代器已经用完了。这是另一个bug。@Charles,这很有意义,因为您在for循环中遍历整个文件后调用了它。不知道你期待什么。。。