我被困在必须编写的脚本中,找不到出路...
我有两个信息部分重叠的文件。根据一个文件中的信息,我必须从另一个文件中提取信息并将其保存到多个新文件中。第一个只是一个带有 ID 和组信息的表(用于拆分)。另一个包含相同的 ID,但每个 ID 有两次略有不同的信息。
我在做什么: 我创建了一个带有 ID 和组信息的列表列表,如下所示:
table = [[ID, group], [ID, group], [ID, group], ...]
然后,因为第二个文件很大并且排序方式与第一个不同,我想创建一个字典作为索引。在这个索引中,我想保存 ID 以及可以在文件中找到的位置,以便以后可以快速跳转到那里。当然,那里的问题是每个 ID 出现两次。我的简单解决方案(但我对此表示怀疑)是在 ID 中添加 -a 或 -b :
index = {"ID-a": [FPos, length], "ID-b": [FPOS, length], "ID-a": [FPos, length], ...}
代码:
for line in file:
read = (line.split("\t"))[0]
if not (read+"-a") in indices:
index = read + "-a"
length = len(line)
indices[index] = [FPos, length]
else:
index = read + "-b"
length = len(line)
indices[index] = [FPos, length]
FPos += length
我现在想知道的是下一步是否真的有效(我没有收到错误,但我对输出文件有一些疑问)。
for name in table:
head = name[0]
## first round
(FPos,length) = indices[head+"-a"]
file.seek(FPos)
line = file.read(length)
line = line.rstrip()
items = line.split("\t")
output = ["@" + head +" "+ "1:N:0:" +"\n"+ items[9] +"\n"+ "+" +"\n"+ items[10] +"\n"]
name.append(output)
##second round
(FPos,length) = indices[head+"-b"]
file.seek(FPos)
line = file.read(length)
line = line.rstrip()
items = line.split("\t")
output = ["@" + head +" "+ "2:N:0:" +"\n"+ items[9] +"\n"+ "+" +"\n"+ items[10] +"\n"]
name.append(output)
可以使用这样的 for 循环吗?
有没有更好、更清洁的方法来做到这一点?