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

指定された関数が変換するために作成されました

"00001000000000000000000010000000000000000000100000000000000000001000000000000000" 

位置固有のコードに、使用すると問題なく動作します

seq1 = "00001000000000000000000010000000000000000000100000000000000000001000000000000000"

取得したコードの入力として、

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

出力として(予想どおり)。しかし、内容を含む入力ファイルを使用した場合:

00001000000000000000000010000000000000000000100000000000000000001000000000000000 
10000000000000000000001000000000000000000010000000000000000000100000000000000000 
00100000000000000000001000000000000000000010000000000000000000100000000000000000

出力は非常に奇妙です。

私には、私が使用するときのようです

seq1="00001000000000000000000010000000000000000000100000000000000000001000000000000000"

" "入力ファイルを使用するため、文字列と見なされるため、個々のキャラクター0と見なされます。1

バイナリコードを含むファイルからバイナリコード入力を行単位で取得し、各行ごとに出力を生成するには、どの方法を使用すればよいですか。

サンプル入力:

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時間費やしましたが、成功しませんでした。助けてください

4

3 に答える 3

1

を使用してファイルを反復処理しenumerate()、行を数えます。

with open(filename) as f:
    for line_no, seq in enumerate(f, start=1):
        print convertSeq(seq, line_no)
于 2013-10-21T09:17:01.983 に答える
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

ファイル名を引数としてプログラムに読み取ることもできるため、ファイル名をハードコーディングする必要はありません

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
于 2013-10-21T09:08:10.070 に答える