我有多个文件需要打开和阅读(我想可能会更容易使用fileinput.input())。这些文件最初包含非相关信息,我需要的是此特定行下面的所有信息 ID [tab] NAME [tab] GEO [tab] FEATURE (有时候从第32行开始,但不幸的是有时候在任何其他行),然后我想将它们存储在一个列表中("条目")
ID[tab]NAME[tab]GEO[tab]FEATURE
1 aa us A1
2 bb ko B1
3 cc ve C1
.
.
.
现在,在阅读第32行(见下面的代码)之前,我想从上面的内容中读到。是否可以使用fileinput执行此操作?或者我走错了路。有没有另一种简单的方法来做到这一点?这是我的代码,直到现在:
entries = list()
for line in fileinput.input():
if fileinput.filelineno() > 32:
entries.append(line.strip().split("\t"))
我试图用Python 3.2实现这个想法
以下是我的代码现在的样子,但仍然超出范围。我需要在字典中添加一些条目。我错过了什么吗?
filelist = fileinput.input()
entries = []
for fn in filelist:
for line in fn:
if line.strip() == "ID\tNAME\tGEO\tFEATURE":
break
entries.extend(line.strip().split("\t")for line in fn)
dic = collections.defaultdict(set)
for e in entries:
dic[e[1]].add(e[3])
错误:
dic[e[1]].add(e[3])
IndexError: list index out of range
答案 0 :(得分:1)
只需遍历文件,查找标记行,然后将所有内容添加到列表中。
编辑发生第二个问题是因为并非原始文件中的所有行都分成至少3个字段。例如,空行会生成一个空列表,因此e[1]
无效。我已经使用嵌套迭代器更新了示例,该迭代器过滤掉了不正确大小的行。您可能想要做一些不同的事情(可能会删除空行,但另外断言剩下的行需要分成3列),但是你明白了这个想法
entries = []
for fn in filelist:
with open('fn') as fp:
for line in fp:
if line.strip() == 'ID\tNAME\tGEO\tFEATURE':
break
#entries.extend(line.strip().split('\t') for line in fp)
entries.extend(items for items in (line.strip().split('\t') for line in fp) if len(items) >= 3)