今日は、組み込み関数を学習していますchr
。\x08
そして、ASCIIテーブル検索を通じて、バックスペースを意味することがわかりました。それで、私はそれで少し遊んだ。しかし、結果は私を混乱させました:
In [52]: print '1\x08'
1
In [53]: print '1\x082'
2
別の文字が続くだけで\x08
、バックスペースのように動作するようですが、なぜこれが起こったのですか? 文字列でどの\x08
ように動作しますか?
今日は、組み込み関数を学習していますchr
。\x08
そして、ASCIIテーブル検索を通じて、バックスペースを意味することがわかりました。それで、私はそれで少し遊んだ。しかし、結果は私を混乱させました:
In [52]: print '1\x08'
1
In [53]: print '1\x082'
2
別の文字が続くだけで\x08
、バックスペースのように動作するようですが、なぜこれが起こったのですか? 文字列でどの\x08
ように動作しますか?
どちらの場合もバックスペースのように動作します。つまり、カーソルを 1 スペース戻します。ただし、他に何かを書かない限り、そこにあるものは削除されません。したがって、最初のケースでは 1 が残りますが、2 番目のケースでは 2 で上書きされます。
Backspace はカーソルを 1 文字だけ移動するだけで、実際にカーソルを削除するわけではありません。たとえば、これは 193 になります。
print('123\x08\x089')
スペースを使用して実際に文字を「削除」できます...
1---- backspace
カーソルを左の 1 スペースに移動するだけで、ワークまたは他のエディターを使用すると、左の 1 文字も削除されます。知っておくべきことは、もまたはbackspace
と同じ文字であるということです。1
a
2---- ターミナルをデフォルトの出力デバイスとして、ファイルとして配置することもできます。
したがって、使用する場合
print '1\x08'
これは、ファイル stdout にa1
と aを書き込むことを意味します。backspace
ファイルを読み取ると、システムは を読み取り1 + breakspace
、1
.
そして、あなたが使用する場合
print '1\x082'
これは、ファイル stdout にa 1
、 a 、backspace
および aを書き込むことを意味します。2
ファイルを読み取ると、システムは を取得します。印刷すると、バックスペースを使用すると最初のファイルがカバーされるため、1 + breakspace + 2
のみが取得されます。2
1
詳細については、次のテスト コードを参照してください。
if __name__ == "__main__":
print "1\x08"
print "1\x082"
f = open("1.txt", "w")
f.write("1\x08\x082")
f.close();
f = open("1.txt", "r")
str = f.readlines( )
print len(str), str
for s in str:
print "s=|" + s + "|"
s=|1\x08\x082|
文字列表示を見ることができますs=2|
。2回だ|1
と表示されないので。backspace