1

contsバイナリ ファイルの内容を含む変数があります ( rbas モードで読み取ります)。スライスを介して文字列の一部を取得しようとすると、変数の適切な長さ (および明らかに内容も) が表示されることが期待されますが、そうではありません。

これを再現できるコードを次に示します。ここで何が起こっているのかわかりません。

hdr1, hdr2 = conts[0:6], conts[10:7]
print "----------------"
print len(conts)
print len(hdr1)
print len(hdr2)
print len(conts)
print "----------------"
print type(hdr1)
print type(hdr2)
print type(conts)

ただし、出力は次のとおりです。

----------------
32174321
6
0
32174321
----------------
<type 'str'>
<type 'str'>
<type 'str'>

何が起きてる?スライスするとスライスごとに新しい文字列が作成されると思いましたか?

Python バージョン:2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]

注:スライス間の 4 バイトのギャップ意図的なものです。問題は、十分なデータがあるにもかかわらず、2 番目のスライスが長さ 0 の文字列を返すことです。(スライスするとき)ピースが隣接している必要があるというドキュメントは見つかりませんでした。

編集:私のエラーを認識した後:17バイトより長い文字列からバイト0〜6とバイト10〜17を取得するつもりでした。

4

3 に答える 3

4

これが空の文字列である理由は、逆方向にスライスするつもりだったと仮定して、スライスに負のステップが必要であると言及しなかったためです。

hdr1, hdr2 = conts[0:6], conts[10:7:-1]

-1必要なことを行います。スライスするときに、前方ではなく後方にステップしたいことをpythonに知らせることに注意してください。

余談ですが、これは文字列を逆にする簡単な方法にもつながります。

reverse = string[::-1]

スライスの形式は次のとおりです。

[start_index:end_index:step]


あなたの編集から、この回答はあなたの目的にとって冗長である可能性があることがわかりますが、知っておくとよい情報なので、そのままにしておきます.
編集で言ったことを行う方法は次のとおりです。

hdr1, hdr2 = conts[0:6], conts[10:17]
于 2012-11-14T03:46:37.173 に答える
2

そうでないかもしれない

hdr1, hdr2 = conts[0:6], conts[10:7]

しかし:

hdr1, hdr2 = conts[0:6], conts[7:10]

つまり、指定された負のステップ (3 番目のパラメーター) を除いて、スライス内の最初の > 2 番目のインデックスにする必要がありますか?

あなたの編集によると:

hdr1, hdr2 = conts[0:6], conts[10:17]
于 2012-11-14T03:45:33.587 に答える
1

conts[10:7]あなたはおそらく意味しますconts[7:10]

于 2012-11-14T03:45:32.753 に答える