首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中有什么方法和两个字符串吗?

在python中有什么方法和两个字符串吗?
EN

Stack Overflow用户
提问于 2015-12-09 19:39:00
回答 1查看 634关注 0票数 0

所以我有几个很大的文件代表了人类基因组中的每一个位置。这两个文件都是基因组中每个位置的某种类型的“分数”的二进制掩码,我有兴趣获得一个新的掩码,其中两个分数都是"1“,也就是两个掩码的交集。

例如:

代码语言:javascript
复制
File 1:          00100010101
File 2:          11111110001
Desired output:  00100010001

在python中,将这些大文件(包含500-2.5亿个字符)读入字符串非常快。但是,我不能只是把字符串放在一起。我可以这样做

代码语言:javascript
复制
bin(int('0001',2) & int('1111', 2))

但是,有没有一种更直接的方式,不需要我在额外的0,并转换回字符串在最后?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 20:28:40

我认为将二进制和操作转换为内置的整数类型可能比按字符工作要快得多(因为Python的int是用C编写的,而不是用Python编写的)。我建议您处理输入文件的每一行,而不是一次性处理整个数百万字符的字符串。二进制和操作不需要任何携带,因此不存在单独处理每一行的问题。

为了避免笨拙的字符串操作将结果填充到正确的长度,您可以使用str.format方法一次性将整数转换为具有正确长度的二进制字符串。下面是一个将输出写入一个新文件的实现:

代码语言:javascript
复制
import itertools

with open(filename1) as in1, open(filename2) as in2, open(filename3, "w") as out:
    for line1, line2 in itertools.izip(in1, in2):
        out.write("{0:0{1}b}\n".format(long(line1, 2) & long(line2, 2), len(line1) - 1))

我使用字符串格式化的一个简洁特性--迷你语言--使用第二个参数为转换的数字传递所需的长度。如果您可以依赖始终有50位二进制数字的行(包括文件末尾),您可以使用{:050b}硬编码长度,而不是从输入行的长度计算它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34187563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档