当前位置: 首页 > 知识库问答 >
问题:

Python链式区间比较

松旻
2023-03-14

我尝试在两个文件之间进行链式比较,如果结果在指定的时间间隔内,则打印/写出结果。

这就是我目前所拥有的。

test1文件:

A0AUZ9,7,17 #just this one line

测试2文件:

A0AUZ8, DOC_PP1_RVXF_1, 8, 16, PF00149, O24930
A0AUZ9, LIG_BRCT_BRCA1_2, 127, 134, PF00533, O25336
A0AUZ9, LIG_BRCT_BRCA1_1, 127, 132, PF00533, O25336
A0AUZ9, DOC_PP1_RVXF_1, 8, 16, PF00149, O25685
A0AUZ9, DOC_PP1_RVXF_1, 8, 16, PF00149, O25155

剧本本身:

results = []

with open('test1', 'r') as disorder:
    for lines in disorder:
        cells = lines.strip().split(',')
        with open('test2', 'r') as helpy:
            for lines in helpy:
                blocks = lines.strip().split(',')
                if blocks[0] != cells[0]:
                    continue
                elif cells[1] <= blocks[2] and blocks[3] <= cells[2]:
                    results.append(blocks)                    

with open('test3','wt') as outfile:
    for i in results:
        outfile.write("%s\n" % i)

我的首选输出是在test3中只包含以下行:

在第一列中有匹配的ID

第3列和第4列中的两个数值介于test1文件中给出的值之间

我没有得到输出,我不知道哪里出错了。

共有1个答案

陶乐生
2023-03-14

它不能按预期工作的原因之一是您正在比较字符串而不是数字。

然而,可能有更好的方法来做你想做的事情。假设第一个文件足够小,可以放入内存:

import csv
from collections import defaultdict

lookup_table = defaultdict(list)

with open('test1.txt') as f:
   reader = csv.reader(f)
   for row in reader:
      lookup_table[row[0]].append((int(row[1]),int(row[2])))

with open('test2.txt') as a, open('results.txt', 'w') as b:
   reader = csv.reader(a)
   writer = csv.writer(b)

   for row in reader:
      record = lookup_table.get(row[0])
      if record:
         if record[0] <= int(row[2]) and record[1] <= int(row[3]):
             writer.writerow(row)
 类似资料:
  • 我有这个代码: 我的IDE说:这看起来应该简化,即Python链式比较。 什么是链式比较,如何简化?

  • 我正在用PyCharm编写一些python代码。当我编写以下测试时,它给了我一个警告。

  • 主要内容:比特币现金如何存在?,什么是比特币硬叉?比特币现金是互联网上的点对点电子现金。它完全分散,没有中央银行,也不需要任何可信赖的第三方运营。 比特币现金是一种从比特币网络的硬分叉开发的加密货币。它从2017年中期开始存在。比特币现金与比特币不同。它是比特币核心软件的升级版本。它使用起来更快,更便宜,更可靠。它将比特币的块大小从1MB增加到8MB,并允许每天处理大约200万个交易。 比特币现金如何存在? 比特币区块链是一个不断更新的分类账,比

  • 假设当前链为Chain2,它的父链为Chain1。Chain2当前的区块为B2.i(B2表示Chain2上的区块,i表示第i个区块),它的ParentHash为B1.j,要求B2.i的时间戳减去B1.j的时间戳大于4分钟且小于5分钟。 时间差大于4分钟(区块确认时间),能够确保区块回滚不影响到父链和子链。 时间差小于5分钟,是为了能够跨多条链访问数据。跨一条链,最大时间差为5分钟;跨n条链,最大时

  • 问题内容: 用于比较的Python文档说: 可以任意链接比较,例如与等效,不同之处在于比较仅被评估一次(但在两种情况下都被发现为假,则根本不评估)。 所以像(人为的例子): 只要求输入一次。这很有道理。和这个: 仅询问 是否 介于1和10之间,并且仅打印“ woo!”。 if 也在10到20之间(证明它们可以“任意链接”)。这也是有道理的。 但是我仍然很好奇在lexer / parser / co

  • 我有两个整数值和,我写以下语句: 此语句带有下划线,工具提示告诉我必须: 简化链式比较 据我所知,这种比较几乎和它们来的一样简单。我错过了什么? 这个问题和链接有点不同,比较起来有不同的变量。