Python 中和不可见的ASCII字符以打印ASCII表
我正在尝试编写一个简短的脚本(用于教程),以显示前128个ASCII字符中哪些是可打印的、可识别的字符 下面使用'is in string.printable'的脚本部分工作正常,但仍会触发换行等事件 是否还有一行或两行我可以添加到陷阱中,并用空格替换这些控制字符,以便表看起来很好并显示可打印字符 为提高noob的可读性而编写的速记:Python 中和不可见的ASCII字符以打印ASCII表,python,string,python-2.7,non-printing-characters,Python,String,Python 2.7,Non Printing Characters,我正在尝试编写一个简短的脚本(用于教程),以显示前128个ASCII字符中哪些是可打印的、可识别的字符 下面使用'is in string.printable'的脚本部分工作正常,但仍会触发换行等事件 是否还有一行或两行我可以添加到陷阱中,并用空格替换这些控制字符,以便表看起来很好并显示可打印字符 为提高noob的可读性而编写的速记: import string lines = [] for i in range(8): line = [] for j in range(16):
import string
lines = []
for i in range(8):
line = []
for j in range(16):
k = i + j *16
thing = chr(k)
if thing not in string.printable:
thing = ' '
line.append(thing)
lines.append(line)
for line in lines:
print "".join(line)
空闲:
0@P`p
!1AQaq
"2BRbr
#3CScs
$4DTdt
%5EUeu
&6FVfv
'7GWgw
(8HXhx
)9IYiy
*:JZjz
+;K[k{
,<L\l|
复制/粘贴到SE中,包括四个空格:
0@P`p
!1AQaq
"2BRbr
#3CScs
$4DTdt
%5EUeu
&6FVfv
'7GWgw
(8HXhx
)9IYiy
*:JZjz
+;K[k{
,<L\l|
0@P`p
!1AQaq
“2BRbr
#3CScs
4DTdt美元
%5EUeu
&6Fv
'7GWgw
(8HXhx)
)9IYiy
*:JZjz
+;K[K{
,N^N~
/?O_O根据OP的意见更新代码以替换不可打印字符
从字符串导入可打印的空白
replace_ch=“”#用于替换不可打印字符的字符
whitespace_ch=“”#要替换为空白字符的字符
#用于控制台输出
输出宽度=8
超出高度=16
chars=[chr(i)表示范围(128)内的i]
#替换空白字符
chars=[空格\u ch如果c在空格中,则为c在字符中]
#替换不可打印的字符
字符=[c如果c在可打印文件中,则替换为c在字符中]
#用于打印的表格行
行=[[chars[i+j*out\u height]表示j在范围内(out\u width)]表示i在范围内(out\u height)]
对于行中的行:
打印(''.join(行))
产出:
0@P`p
!1AQaq
"2BRbr
#3CScs
$4DTdt
%5EUeu
&6FVfv
'7GWgw
(8HXhx
)9IYiy
*:JZjz
+;K[k{
,<L\l|
-=M]m}
.>N^n~
/?O_o
0@P`p
!1AQaq
“2BRbr
#3CScs
4DTdt美元
%5EUeu
&6Fv
'7GWgw
(8HXhx)
)9IYiy
*:JZjz
+;K[K{
,N^N~
/?欧欧欧
另一种方法是简单地避免ASCII的前32个字符,因为它们被定义为控制字符。检查字符的ord(c)
,c
导入字符串可能更有效
import string
columns = []
height = 10
whitespace_map = {
'\t': 'TAB',
'\n': 'LF',
'\r': 'CR',
'\x0b': 'VT',
'\x0c': 'FF',
}
i = 0
j = height
while i < len(string.printable):
column = string.printable[i:j]
columns.append(column)
i += height
j += height
k = 0
while k < height:
for column in columns:
if k > len(column):
break
c = column[k]
if c in string.whitespace and c != ' ':
c = whitespace_map[c]
# Alternative: c = ' '
print('{: <5}'.format(c), end='')
print()
k += 1
列=[]
高度=10
空格\映射={
“\t”:“选项卡”,
“\n”:“LF”,
“\r”:“CR”,
“\x0b”:“VT”,
“\x0c”:“FF”,
}
i=0
j=高度
而ilen(列):
打破
c=列[k]
如果string.whitespace中的c和c!='':
c=空白映射[c]
#备选方案:c=''
打印('{:是的,我将替换字符设置为“.”以使它们出现,但这有点奇怪。请给我一点时间来弄清楚……我已经在中添加了这一点!我将像您那样设置我的行,这应该是每个有吸引力的表都要做的!这是一个更有启发性的答案,希望我能接受这两个。感谢您弄清楚string.whitespace
!很有趣!如果您的输出和处理能够处理,那么该块可以用作替换字符。@TomBlodget在与a进行斗争后,我发现了一个轻微的独角兽恐惧症。尽管如此,控制图片块看起来非常有趣,我会记住它。感谢您提供的信息!