我有一个字典,用于搜索ID名称并在其后读取令牌。但我想知道是否有办法读取并打印出包含该ID名称的整行。
这是我到目前为止所做的:
lookup = defaultdict(list)
wholelookup =defaultdict(list)
mydata = open('summaryfile.txt')
for line in csv.reader(mydata, delimiter='\t'):
code = re.match('[a-z](\d+)[a-z]', line[-1], re.I)
if code:
lookup[line[-2]].append(code.group(1))
wholelookup[line[-2]].append(code.group(0))
答案 0 :(得分:0)
如果你有足够的内存,最简单的方法就是将行保存在另一个defaultdict中:
wholeline = defaultdict(list)
...
idname = line[-2]
wholeline[idname].append(line)
答案 1 :(得分:0)
您的代码调用csv.reader()
,它将返回整行的解析版本。在我的测试中,这将返回一个值列表。如果这个值列表适用于“整行”,那么你可以保存它。
你有一行你附加名为wholelookup
的东西。我想您只想保存line
而不是code.group(0)
。 code.group(0)
返回正则表达式匹配的所有内容,这与line[-1]
相同。
所以也许把这一行放在你的代码中:
wholelookup[line[-2]].append(line)
或者您可能需要将line
中的值连接在一起以生成单个字符串:
s = ' '.join(line)
wholelookup[line[-2]].append(s)
如果您想要整行,而不是解析版本,那么请执行以下操作:
lookup = defaultdict(list)
wholelookup = defaultdict(list)
pat = re.compile('[a-z](\d+)[a-z]', re.I)
with open('summaryfile.txt') as mydata:
for s_line in mydata:
values = s_line.split('\t')
code = re.match(pat, values[-1])
if code:
lookup[values[-2]].append(code.group(1))
wholelookup[values[-2]].append(s_line)
此示例预先编译模式以获得轻微的速度优势。