Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 中和不可见的ASCII字符以打印ASCII表_Python_String_Python 2.7_Non Printing Characters - Fatal编程技术网

Python 中和不可见的ASCII字符以打印ASCII表

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):

我正在尝试编写一个简短的脚本(用于教程),以显示前128个ASCII字符中哪些是可打印的、可识别的字符

下面使用'is in string.printable'的脚本部分工作正常,但仍会触发换行等事件

是否还有一行或两行我可以添加到陷阱中,并用空格替换这些控制字符,以便表看起来很好并显示可打印字符

为提高noob的可读性而编写的速记:

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进行斗争后,我发现了一个轻微的独角兽恐惧症。尽管如此,控制图片块看起来非常有趣,我会记住它。感谢您提供的信息!