首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >测试python字符串是否可打印

测试python字符串是否可打印
EN

Stack Overflow用户
提问于 2010-09-03 22:54:23
回答 10查看 56.4K关注 0票数 31

我有一些从串口提取数据的代码,在打印之前,我想确保我得到的是一个可打印的字符串(即ASCII,也许是UTF-8)。有没有这样做的函数?我寻找的前六个地方,没有任何看起来像我想要的东西。(string has printable,但我没有看到任何东西(在那里,或者在the string methods中)来检查一个字符串中的每个字符是否都在另一个字符串中。

注意:对于我来说,控制字符是而不是可打印的。

编辑:我正在寻找一个单一的函数,而不是一个自己的解决方案:

我最终得到的结论是:

代码语言:javascript
复制
all(ord(c) < 127 and c in string.printable for c in input_str)
EN

回答 10

Stack Overflow用户

发布于 2010-09-03 23:34:06

正如您所说的string module has printable,这只是检查字符串中的所有字符是否都是printable格式的情况

代码语言:javascript
复制
>>> hello = 'Hello World!'
>>> bell = chr(7)
>>> import string
>>> all(c in string.printable for c in hello)
True
>>> all(c in string.printable for c in bell)
False

您可以将这两个字符串转换为集合-这样集合将包含字符串中的每个字符一次-并检查由您的字符串创建的集合是否is a subset of可打印的字符:

代码语言:javascript
复制
>>> printset = set(string.printable)
>>> helloset = set(hello)
>>> bellset = set(bell)
>>> helloset
set(['!', ' ', 'e', 'd', 'H', 'l', 'o', 'r', 'W'])
>>> helloset.issubset(printset)
True
>>> set(bell).issubset(printset)
False

因此,总而言之,您可能希望这样做:

代码语言:javascript
复制
import string
printset = set(string.printable)
isprintable = set(yourstring).issubset(printset)
票数 50
EN

Stack Overflow用户

发布于 2010-09-03 23:29:19

try/except似乎是最好的方式:

代码语言:javascript
复制
def isprintable(s, codec='utf8'):
    try: s.decode(codec)
    except UnicodeDecodeError: return False
    else: return True

我不会依赖string.printable,它可能认为“不可打印”的控制字符通常可以“打印”用于终端控制目的(例如,在“着色”ANSI转义序列中,如果您的终端符合ANSI标准)。当然,这取决于你想要检查这个的确切目的!-)

票数 8
EN

Stack Overflow用户

发布于 2011-07-29 23:42:06

代码语言:javascript
复制
>>> # Printable
>>> s = 'test'
>>> len(s)+2 == len(repr(s))
True

>>> # Unprintable
>>> s = 'test\x00'
>>> len(s)+2 == len(repr(s))
False
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3636928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档