相关疑难解决方法(0)

使用Python将"\ x"替换为文本中的"0x"

我有一个包含的文本,\x我想用这个替换0x.我使用了以下Python命令,但都失败了:

>>> text= '\x1bs\x1b\x01Z\xa2\x8d\xa2^\xb9*d\x08\x10&B\xb1z\xd4\xa91\xa3D
\xaf\xa1\x9a\x94\x8c\xd3\xb2r\x80\xc3\xb7)\xd8\x1bi\x80\x81\x02\x04\x08\x10@
\x81}0\xa8J\x95\x02E\x08\x10 @\x81\x02\x04\x08\x10 @\x81\x02\x04\x08\x10@
\x9f+\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x1b\x02^\xd3Q\xcc\xd70\x0eB\x88A\x1chB\x1bL\x81\xadC\x00
\x84!\rr(\x07\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x03
\x00?\x1c\x1b0'
>>>
>>>
>>> text.replace('\x',' 0x')
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape
>>>
>>>
>>> text.replace(u'\x',' 0x')
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape
>>>
>>>
>>> text.replace(r'\x',' 0x')
'\x1bs\x1b\x01Z¢\x8d¢^¹*d\x08\x10&B±zÔ©1£D¯¡\x9a\x94\x8cÓ²r\x80÷)Ø\x1bi\x80
\x81\x02\x04\x08\x10 @\x81}0¨J\x95\x02E\x08\x10 @\x81\x02\x04\x08\x10 @\x81
\x02\x04\x08\x10@\x9f+\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x02^ÓQÌ×0\x0eB\x88A\x1chB\x1bL\x81\xadC
\x00\x84!\rr(\x07ÿ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x03
\x00?\x1c\x1b0'
>>>
>>>
>>> text.replace('\\x',' 0x')
'\x1bs\x1b\x01Z¢\x8d¢^¹*d\x08\x10&B±zÔ©1£D¯¡\x9a\x94\x8cÓ²r\x80÷)Ø\x1bi\x80 …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

3
推荐指数
1
解决办法
2157
查看次数

转换 UTF-8 的八进制表示形式

我有一个这样的变量:

\n\n
>>> s = \'\\\\320\\\\227\\\\320\\\\264\\\\320\\\\260\\\\320\\\\275\\\\320\\\\270\\\\320\\\\265 \\\\320\\\\261\\\\321\\\\213\\\\320\\\\262\\\\321\\\\210\\\\320\\\\265\\\\320\\\\271\'\n>>> print(s)\n\\320\\227\\320\\264\\320\\260\\320\\275\\320\\270\\320\\265 \\320\\261\\321\\213\\320\\262\\321\\210\\320\\265\\320\\271\n
Run Code Online (Sandbox Code Playgroud)\n\n

这包含字符串“\xd0\x97\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5\xd0\xb1\xd1\x8b\xd0”的UTF-8编码的八进制转义表示\xb2\xd1\x88\xd0\xb5\xd0\xb9"(八进制320 227=十六进制D0 97= UTF-8 表示“\xd0\x97”)。如何将此字符串解码为“\xd0\x97\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5\xd0\xb1\xd1\x8b\xd0\xb2\xd1\x88\xd0 \xb5\xd0\xb9"?

\n

python encoding decoding

3
推荐指数
1
解决办法
2113
查看次数

在python中将“\x”转义字符串转换为可读字符串

有没有办法将\x转义字符串转换"\\xe8\\xaa\\x9e\\xe8\\xa8\\x80"为可读形式:"??"

>>> a = "\\xe8\\xaa\\x9e\\xe8\\xa8\\x80"
>>> print(a)
\xe8\xaa\x9e\xe8\xa8\x80
Run Code Online (Sandbox Code Playgroud)

我知道,有一个类似的问题在这里,但似乎该解决方案仅适用于拉丁字符。如何将这种形式的字符串转换为可读的 CJK 字符?

python unicode encoding utf-8

3
推荐指数
1
解决办法
621
查看次数

将字符串作为参数传递,而不将其视为原始字符串

我想将一个字符串传递给我的python脚本,该脚本包含转义序列,例如:\x00\t,和空格.
但是当我传入我的字符串时:

some string\x00 more \tstring
Run Code Online (Sandbox Code Playgroud)

python将我的字符串视为原始字符串,当我从脚本内部打印该字符串时,它按字面打印字符串,并不将其\视为转义序列.
即它打印完全上面的字符串.

更新:(刚刚)
我正在使用python 2.7.5重现,创建一个脚本,让我们调用它myscript.py:

import sys
print(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)

现在保存它并从windows命令提示符中调用它:

c:\Python27\python.exe myscript.py "abcd \x00 abcd"
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

> 'abcd \x00 abcd'
Run Code Online (Sandbox Code Playgroud)

PS在我的实际脚本中,我使用的是选项解析器,但两者都有相同的效果.也许我可以为选项解析器设置一个参数来处理转义序列?

python python-2.7

2
推荐指数
2
解决办法
1万
查看次数

从文件读取utf-8转义序列

我有一个utf-8编码的文件,其中包含多行,例如

\ x02我不喜欢\ x0307香蕉\ x03。\ x02
嗨,你好吗?
你打过电话了?

如何将文件的行读取到列表中,对所有转义序列进行解码?我尝试了下面的代码:

with codecs.open(file, 'r', encoding='utf-8') as q:
    quotes = q.readlines()

print(str(random.choice(quotes)))
Run Code Online (Sandbox Code Playgroud)

但是它打印行而不解码转义字符。

\ x02我不喜欢\ x0307香蕉\ x03 \ x02

(请注意:转义字符是IRC颜色代码,\x02是加粗文本的字符,并且\x03是颜色代码的前缀。此外,此代码来自我的IRC僵尸程序,其中的MSG功能由代替print()

python utf8-decode python-unicode

2
推荐指数
1
解决办法
2708
查看次数

Python:末尾带有\n的eval字符串

如何使用\n对字符串执行eval?

为什么这不起作用?

a = eval('"hello \n"')
In [70]: eval("\"hello \n\"")
  File "<string>", line 1
    "hello
          ^
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)

这样做

a = "hello \n"
Run Code Online (Sandbox Code Playgroud)

我的用例是通过子进程执行的脚本输出字典作为字符串,我正在捕获它的标准输出,我想对它执行一个eval.

'''[
     { "hello": "the description of this is\' \n"}
]'''
Run Code Online (Sandbox Code Playgroud)

python python-2.7

2
推荐指数
1
解决办法
1646
查看次数

在python 3中解码(unicode_escape)一个字符串

我已经检查了此解决方案,但在python3中不起作用。

我有一个这样的转义字符串:str = "Hello\\nWorld"而且我想获得未转义的相同字符串:str_out = Hello\nWorld

我尝试了这个没有成功: AttributeError: 'str' object has no attribute 'decode'

这是我的示例代码:

str = "Hello\\nWorld"
str.decode('unicode_escape')
Run Code Online (Sandbox Code Playgroud)

python escaping

2
推荐指数
1
解决办法
2525
查看次数

没有shell转义序列的git show/log,用于python sh

我正在使用python的sh来编写git命令.例如,我做的事情就像

import sh
git = sh.git.bake(_cwd='/some/dir/')

project_hash = git('rev-parse', 'HEAD').stdout.strip()
project_branch = git('rev-parse', '--abbrev-ref', 'HEAD').stdout.strip()
project_date = git('log', '-1', '--pretty=format:%ci').stdout.strip()
Run Code Online (Sandbox Code Playgroud)

然后我将project_hash,project_branch和project_date写入数据库等.

问题是git有时会在其输出中添加shell转义序列.例如,

print(repr(project_hash))
print(repr(project_branch))
print(repr(project_date))
Run Code Online (Sandbox Code Playgroud)

导致

'e55595222076bd90b29e184b6ff6ad66ec8c3a03'
'master'
'\x1b[?1h\x1b=\r2012-03-26 01:07:40 -0500\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>'
Run Code Online (Sandbox Code Playgroud)

前两个字符串不是问题,但最后一个字符串,即日期,具有转义序列.

有什么方法可以摆脱这些,例如要求git不输出任何转义序列?

我已经使用git log命令尝试了"--no-color"选项.这没有用.

我也很乐意在python中删除它们,但我不知道如何.我试过s.encode('ascii'),其中s是日期字符串.这并没有什么不同.

在没有shell转义序列的Python中打印stdout解决了同样的问题.建议使用python的子进程而不是sh.我可以做到

project_date = subprocess.check_output(["git", "log", "-1", "--pretty=format:%ci"], cwd='/some/dir/')
Run Code Online (Sandbox Code Playgroud)

print(repr(project_date))
Run Code Online (Sandbox Code Playgroud)

'2012-03-26 01:07:40 -0500'
Run Code Online (Sandbox Code Playgroud)

当然,这就是我想要的.但是,如果有可能我宁愿坚持使用sh,那么我想知道我是否可以使用sh来避免转义序列.

有什么建议?

python git shell

1
推荐指数
1
解决办法
1574
查看次数

Python - Unicode 和双反斜杠

我用 BeautifulSoup 删除了一个网页。我得到了很好的输出,除了列表的一部分在获取文本后看起来像这样:

list = [u'that\\u2019s', u'it\\u2019ll', u'It\\u2019s', u'don\\u2019t', u'That\\u2019s', u'we\\u2019re', u'\\u2013']
Run Code Online (Sandbox Code Playgroud)

我现在的问题是如何摆脱或用它们的特殊字符替换这些双反斜杠。

如果我打印示例列表的第一个元素,输出看起来像

print list[0]
that\u2019s
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多关于这个主题的其他问题/线程,但我最终更加困惑,因为我是一个考虑 unicode/编码/解码的初学者。

我希望有人能帮助我解决这个问题。

谢谢!MG

python unicode beautifulsoup backslash unicode-escapes

1
推荐指数
1
解决办法
6886
查看次数