2

始める前に、私はプログラミングに本当に慣れていないので、私を殺さないでください。

演習として、txt から 16 進数のリストを取得し、それらを 10 進数に変換して別のファイルに書き込むスクリプトを作成しました。これは私が思いついたものです:

hexdata = open(raw_input("Sourcefile:")).read().split(',')
dec_data = []

print hexdata
x = -1
for i in hexdata:
    next_one = hexdata.pop(x+1)
    decimal = int(next_one, 16)
    print "Converting: ", next_one, "Converted:", decimal
    dec_data.append(decimal)

print dec_data

target = open(raw_input("Targetfile: "), 'w')
for n in dec_data:
    output = str(n)
    target.write(output)
    target.write(",")

スクリプトを実行すると、エラーなしで終了しますが、ソースファイルから最初の 30 個の数値のみを変換して書き込み、「hexdata」リストにロードされているにもかかわらず、他のすべての数値を無視します。いくつかのバリエーションを試しましたが、すべての数字 (48) では機能しません。私は何を間違っていますか?

4

2 に答える 2

6

最初のループは、hexdata.pop() を使用してリストから値を引き出すと同時に、hexdata を反復処理しようとしています。次のように変更するだけです:

for next_one in hexdata:
    decimal = int(next_one, 16)
    print "Converting: ", next_one, "Converted:", decimal
    dec_data.append(decimal)
于 2012-05-03T21:31:50.870 に答える
1

リストを反復するときの原則は、反復しているリストを変更しないことです。必要に応じて、リストのコピーを作成して繰り返し処理することができます。

for i in hexdata[:]: # this creates a shallow copy, or a slice of the entire list
    next_one = hexdata.pop(x+1)
    decimal = int(next_one, 16)
    print "Converting: ", next_one, "Converted:", decimal
    dec_data.append(decimal)

を使用してディープ コピーを作成することもできますcopy.deepcopy。これにより、シャロー コピーで発生する などの問題を回避できますhexdata[:]

于 2012-05-03T21:34:00.977 に答える