実現したいこと
Pythonでstrをバイト文字列に変換する際にバックスラッシュが2本にならないようにしたい
前提
Python3.9.5
発生している問題・エラーメッセージ
Pythonで文字列をバイトに変換するとバックスラッシュが2本になってしまう。
該当のソースコード
Python
1strings = "\abc\aaa\www\hhh\a\j\d" 2byte_str = str.encode('utf-8') 3print(byte_string)
結果:b'\\abc\\aaa\\www\\hhh\\a\\j\\d'
期待:b'\abc\aaa\www\hhh\a\j\d'
試したこと
①下記のコードでreplaceを実行したところ、エラーは出ませんでしたが結果は変わりませんでした。
Python
1strings = "\abc\aaa\www\hhh\a\j\d" 2byte_str = str.encode('utf-8').replace(b'\\\\', b'\\') 3print(byte_string)
②文字列にbを付与して、バイトとして認識しないか試しましたが文字列として認識されてしまいました。
備考
今回は例としてStringsを作成していますが、Stringsは与えられた変数として、最初からバイト列に設定することはできないという前提でお願いいたします。
質問内容とコードは合っているでしょうか?
提示コードを(「print(byte_str)」に直して)実行すると「b'utf-8'」と表示されます。

コードがおかしいので以下のように修正します。
$ python
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> "\abc\aaa\www\hhh\a\j\d".encode('utf-8')
b'\x07bc\x07aa\\www\\hhh\x07\\j\\d'
結果は全く違いますね。中のバイト列を16進数で表示すると...
>>> for b in b'\x07bc\x07aa\\www\\hhh\x07\\j\\d':
... print(hex(b))
...
0x7
0x62
0x63
0x7
0x61
0x61
0x5c
0x77
0x77
0x77
0x5c
0x68
0x68
0x68
0x7
0x5c
0x6a
0x5c
0x64
>>>
となります。バイト列リテラルの引用符の中はバイト列をASCIIコードの文字列にdecodeされたもので示されます。ASCIIコードにない文字はエスケープされます。詳しくは以下。
文字列およびバイト列リテラル
https://docs.python.org/ja/3/reference/lexical_analysis.html#string-and-bytes-literals

回答2件
あなたの回答
tips
プレビュー