2013-10-21 49 views
0
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 

鑑於functoin已創建如果我使用我怎麼能改正我的Python代碼的二進制字符串轉換成位置的特定代碼

seq1 = "00001000000000000000000010000000000000000000100000000000000000001000000000000000" 

"00001000000000000000000010000000000000000000100000000000000000001000000000000000" 

轉換成位置的特定代碼它做工精細

爲代碼我得到輸入,

1 1:5 1:25 1:45 1:65 

作爲輸出(如預期)。但是,當我使用內容的輸入文件:

00001000000000000000000010000000000000000000100000000000000000001000000000000000 
10000000000000000000001000000000000000000010000000000000000000100000000000000000 
00100000000000000000001000000000000000000010000000000000000000100000000000000000 

輸出是非常奇怪的。

對我來說,似乎當我使用

seq1="00001000000000000000000010000000000000000000100000000000000000001000000000000000" 

它被認爲是因爲" "一個字符串,當我使用一個輸入文件,因此它認爲01個別charactera。

我應該使用什麼方法,以便它可以從包含二進制代碼的文件的二進制代碼輸入行,併爲每一行生成輸出。

樣品輸入:

00001000000000000000000010000000000000000000100000000000000000001000000000000000 
10000000000000000000001000000000000000000010000000000000000000100000000000000000 
00100000000000000000001000000000000000000010000000000000000000100000000000000000 
00001000000000000000000010000000000000000000100000000000000000001000000000000000 
10000000000000000000001000000000000000000010000000000000000000100000000000000000 
00100000000000000000001000000000000000000010000000000000000000100000000000000000 

樣本輸出:

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幫助

+0

您已經編寫了代碼。你期望我們做什麼? –

回答

1

迭代使用文件來計算行數:

with open(filename) as f: 
    for line_no, seq in enumerate(f, start=1): 
     print convertSeq(seq, line_no) 
2

如果convertSeq有效,那麼應該這樣做:

line_num = 1 
for line in open(filename): 
    print convertSeq(line, line_num) 
    line_num += 1 
+0

非常好的工作,如果這些(00001000000000000000000010000000000000000000000000000000000000000000000000000)行輸出的功能,而是將其存儲在一個文件我直接要使用函數convertSeq(s,索引),以便它直接生成輸出1 1:5 1:25 1 :45 1:65那麼在給定的代碼中的變化會多麼多謝 – JAZs

+0

@ mshsayem \t 如果這些(00001000000000000000000010000000000000000000010000000000000000000100000000000000 0)行輸出函數並將其存儲在文件中,我直接希望它工作的很好使用函數convertSeq(s,index)以便它直接生成輸出1 1:5 1:25 1:45 1:65那麼給定的變化 – JAZs

+0

如果輸入字符串(比如函數中的'st')包含換行符('\ n'),那麼你可以調用'st.split('\ n')',枚舉結果列表然後調用'convertSeq'。 ...我有點困惑,你真的想要什麼.. – mshsayem

1

你可以像這樣,讀取整個文件作爲字符串,並傳遞給你的函數

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 

從你給的內容,它提供了以下輸出

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到您的程序,所以你不必硬編碼的文件名

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 
+0

我錯過了你的問題中的行號部分,所以你可以使用@Duncan建議的enumerate()。更新我的代碼,以反映它 – DevC

+0

嘿偉大的工作對我很好 – JAZs

+1

很酷,請考慮接受答案,如果這就是你要找的 – DevC

相關問題