剥离非ascii字符的多行字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剥离非ascii字符的多行字符串相关的知识,希望对你有一定的参考价值。

我想在IDLE中将一个字符串放入shell中。它包含一些我想删除的非ascii字符。我不能只将它粘贴到多行字符串中,例如

u'''✔uganda
✔zambia
✔zimbabwe
and none of these…
✕afghanistan
✕armenia
✕azerbaijan'''

因为这会给我以下错误:

Unsupported characters in input

而我无法使用

string = [raw_]input()

因为字符串超过一行宽。


如何将字符串放入shell?

答案

如果你不能像这样定义一个string(在你的机器上),那么你将需要input它。这意味着你需要一些代码来接受multi-line输入,当你读取每一行时,检查每个字符的ord()是否小于256(即它在ASCIIset中)。

这是代码:

inpt = ''.join(c for c in input() if ord(c) < 256)
while True:
    s = ''.join(c for c in input() if ord(c) < 256)
    if s:
        inpt += "
" + s
    else:
        break

这工作:

✔uganda
✔zambia
✔zimbabwe
and none of these…
✕afghanistan
✕armenia
✕azerbaijan

>>> inpt
'uganda
zambia
zimbabwe
and none of these
afghanistan
armenia
azerbaijan'
>>> print(inpt)    
uganda
zambia
zimbabwe
and none of these
afghanistan
armenia
azerbaijan
另一答案

如果您的会话中存储了数据并且不能只执行脚本,那么您可以运行一个输入循环来复制完整的输入。

码:

inp = ""


for line in iter(input, “”):
        inp += line
另一答案

在脚本中定义它。文件,新,然后:

#!coding:utf8
s = u'''✔uganda
✔zambia
✔zimbabwe
and none of these…
✕afghanistan
✕armenia
✕azerbaijan'''
print s

保存它,然后按F5在IDLE shell中运行它。输出:

✔uganda
✔zambia
✔zimbabwe
and none of these…
✕afghanistan
✕armenia
✕azerbaijan

或者,切换到最新的Python。 3.6的空闲工作正常:

>>> s='''
✔uganda
✔zambia
✔zimbabwe
and none of these…
✕afghanistan
✕armenia
✕azerbaijan'''
>>> print(s)
✔uganda
✔zambia
✔zimbabwe
and none of these…
✕afghanistan
✕armenia
✕azerbaijan

以上是关于剥离非ascii字符的多行字符串的主要内容,如果未能解决你的问题,请参考以下文章

运行 Python 代码中的“SyntaxError:非 ASCII 字符”

SyntaxError: 非 ASCII 字符 '\xd1'

PL SQL 删除非 Ascii 字符,但不删除回车符

如何使用非 ascii 字符处理 HttpWebRequest 重定向

从文本文件中读取非 ASCII 字符

用一些字母替换非ASCII字符以保持文件格式相同