gpt4 book ai didi

python - 如何仅从一个文件中打印出具有间隔的记录,而不是与另一个文件中的记录重叠

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:27 25 4
gpt4 key购买 nike

我有两个代表间隔记录的文件。

文件1.txt

a 5 10
a 13 19
a 27 39
b 4 9
b 15 19
c 20 33
c 39 45

文件2.txt

something id1 a 4 9 commentx
something id2 a 14 18 commenty
something id3 a 1 4 commentz
something id5 b 3 9 commentbla
something id6 b 16 18 commentbla
something id7 b 25 29 commentblabla
something id8 c 5 59 hihi
something id9 c 40 45 hoho
something id10 c 32 43 haha

我想做的是制作一个仅代表 file2 记录的文件,如果 file2 的第 3 列与 file1 的第 1 列相同,则范围(第 4 列和第 5 列)不与 file1 重叠(第 2 和 3 列)。

预期的输出文件应该在一个文件中

测试结果

something id3 a 1 4 commentz
something id7 b 25 29 commentblabla

我尝试使用以下 python 代码:

import csv
with open ('file2') as protein, open('file1') as position, open ('test.result',"r+") as fallout:
writer = csv.writer(fallout, delimiter=' ')
for rowinprot in csv.reader(protein, delimiter=' '):
for rowinpos in csv.reader(position, delimiter=' '):
if rowinprot[2]==rowinpos[0]:
if rowinprot[4]<rowinpos[1] or rowinprot[3]>rowinpos[2]:
writer.writerow(rowinprot)

这似乎没有用...我得到了以下结果:

something id1 a 4 9 commentx
something id1 a 4 9 commentx
something id1 a 4 9 commentx

这显然不是我想要的。

我做错了什么?它似乎在条件循环中。不过,我还是想不通...

最佳答案

在循环中做循环不是一个好方法。尽量避免做这样的事情。我认为您可以首先使用 dict 对象缓存 file1 的内容。然后,当循环 file2 时,您可以使用 dict 对象来查找您需要的东西。所以,我将像下面这样编写代码:

with open("file1.csv", "r") as protein, open("file2.csv", "r") as postion, open("result.csv", "w") as fallout:
writer = csv.writer(fallout, delimiter=' ')
protein_dict = {}
for rowinprt in csv.reader(protein, delimiter=' '):
key = rowinprt[0]
sub_value = (int(rowinprt[1]), int(rowinprt[2]))
protein_dict.setdefault(key, [])
protein_dict[key].append(sub_value)

for pos in csv.reader(postion, delimiter=' '):
id_key = pos[2]
id_min = int(pos[3])
id_max = int(pos[4])
if protein_dict.has_key(id_key) and all([ id_max < _min or _max < id_min for _min, _max in protein_dict[id_key]]):
writer.writerow(pos)

关于python - 如何仅从一个文件中打印出具有间隔的记录,而不是与另一个文件中的记录重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38521553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com