所以我试图通过将文本文件转换为列表并将空格中的每个项目拆分来解析文本文件。
我创建了一个测试变量来自行运行这部分代码。 我在Spyder编辑器中的代码:
test = ['NC_009142.1_03_012_002_001 560', 'NC_017586.1_13_009_003_001 555', 'NC_016111.1_13_010_003_001 555']
ListOfLinesParsed = test
PN_List = []
counter_iterative = 0
while counter_iterative < len(ListOfLinesParsed):
PN_List = PN_List.append(ListOfLinesParsed[counter_iterative].split()[0])
counter_iterative += 1
print PN_List
返回错误:
runfile(r'/ home / jake / .spyder2 / .temp.py',wdir = r'/ home / jake / .spyder2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-
packages/spyderlib/widgets/externalshell/sitecustomize.py", line 493, in runfile
execfile(filename, namespace)
File "/home/jake/.spyder2/.temp.py", line 7, in <module>
PN_List = PN_List.append(ListOfLinesParsed[counter_iterative].split()[0])
AttributeError: 'NoneType' object has no attribute 'append'
但如果我直接在终端输入命令,我就不会收到任何错误:
testL = []
testL.append(试验[0] .split()[0])
为test1
['NC_009142.1_03_012_002_001']
testL.append(试验[1] .split()[0])
为test1
['NC_009142.1_03_012_002_001', 'NC_017586.1_13_009_003_001']
testL.append(测试[2] .split()[0])
为test1
['NC_009142.1_03_012_002_001', 'NC_017586.1_13_009_003_001', 'NC_016111.1_13_010_003_001']
两件事情不应该完全相同吗?我不明白为什么我的脚本中的一个与终端命令的行为不同。
答案 0 :(得分:6)
该行
PN_List = PN_List.append(ListOfLinesParsed[counter_iterative].split()[0])
是问题。
list.append
是一个就地操作,它返回None
,但会改变原始列表本身。如果您将PN_List
分配给结果,则会变为None
。如果不这样做,那么您的程序将顺利运行。这就是为什么当你尝试附加没有作业的东西时,你会得到预期的答案。