首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更正python代码将二进制字符串转换为特定位置的代码

如何更正python代码将二进制字符串转换为特定位置的代码
EN

Stack Overflow用户
提问于 2013-10-21 08:58:14
回答 3查看 140关注 0票数 0
代码语言:javascript
复制
def convertSeq(s, index):
    result = [i+1 for i,ch in enumerate(s) if ch=='1']
    result = ' '.join([str(index)+':'+str(i) for i in result])
    result = str(index)+' '+result
    return result
seq1 = "00001000000000000000000010000000000000000000100000000000000000001000000000000000"

a = convertSeq(seq1, 1)
print a

给定的函数被创建来转换

代码语言:javascript
复制
"00001000000000000000000010000000000000000000100000000000000000001000000000000000" 

特定位置的代码,如果我使用

代码语言:javascript
复制
seq1 = "00001000000000000000000010000000000000000000100000000000000000001000000000000000"

作为我得到的代码的输入,

代码语言:javascript
复制
 1 1:5 1:25 1:45 1:65 

如预期的那样。但是,当我使用包含内容的输入文件时:

代码语言:javascript
复制
00001000000000000000000010000000000000000000100000000000000000001000000000000000 
10000000000000000000001000000000000000000010000000000000000000100000000000000000 
00100000000000000000001000000000000000000010000000000000000000100000000000000000

输出结果很奇怪。

在我看来,当我用

代码语言:javascript
复制
seq1="00001000000000000000000010000000000000000000100000000000000000001000000000000000"

由于" "和当我使用输入文件时,它被认为是字符串,因此它将01视为单独的字符。

我应该使用什么样的方法才能从包含二进制代码的文件中获取二进制代码输入,并为每一行生成输出。

样本输入:

代码语言:javascript
复制
00001000000000000000000010000000000000000000100000000000000000001000000000000000
10000000000000000000001000000000000000000010000000000000000000100000000000000000
00100000000000000000001000000000000000000010000000000000000000100000000000000000
00001000000000000000000010000000000000000000100000000000000000001000000000000000
10000000000000000000001000000000000000000010000000000000000000100000000000000000
00100000000000000000001000000000000000000010000000000000000000100000000000000000

样本输出:

代码语言:javascript
复制
1 1:5 1:25 1:45 1:65
2 2:1 2:21 2:44 2:64
and so on...........

由于我在编程方面很新,所以我花了5-6个小时在上面,但没有succeeded.Please帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-21 09:17:01

使用enumerate()迭代文件以计算行数:

代码语言:javascript
复制
with open(filename) as f:
    for line_no, seq in enumerate(f, start=1):
        print convertSeq(seq, line_no)
票数 1
EN

Stack Overflow用户

发布于 2013-10-21 09:06:25

如果convertSeq有效,那么应该可以这样做:

代码语言:javascript
复制
line_num = 1
for line in open(filename):
    print convertSeq(line, line_num)
    line_num += 1
票数 2
EN

Stack Overflow用户

发布于 2013-10-21 09:08:10

您可以这样做,将整个文件作为字符串读取并传递给您的函数。

代码语言:javascript
复制
def convertSeq(s, index):
    result = [i+1 for i,ch in enumerate(s) if ch=='1']
    result = ' '.join([str(index)+':'+str(i) for i in result])
    result = str(index)+' '+result
    return result

# read the sequence from file
with open ("file.txt",'r') as f:
   f_seq=f.readlines()

for line, seq in enumerate(f_seq, start=1):
    a = convertSeq(seq, line)
    print a

从您给出的内容中,它提供了以下输出

代码语言:javascript
复制
1 1:5 1:25 1:45 1:65
2 2:1 2:23 2:43 2:63
3 3:3 3:23 3:43 3:63
4 4:5 4:25 4:45 4:65
5 5:1 5:23 5:43 5:63
6 6:3 6:23 6:43 6:63

您也可以将文件名作为arg读取到您的程序中,因此不必对文件名进行硬编码。

代码语言:javascript
复制
import sys
def convertSeq(s, index):
    result = [i+1 for i,ch in enumerate(s) if ch=='1']
    result = ' '.join([str(index)+':'+str(i) for i in result])
    result = str(index)+' '+result
    return result

#take the file name as arg
seqFile = sys.argv[1]

with open (seqFile,'r') as f:
   f_seq=f.readlines()

for line, seq in enumerate(f_seq, start=1):
    a = convertSeq(seq, line)
    print a
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19490082

复制
相关文章

相似问题

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