• python自学笔记(二)


    通过前文介绍,大体上可以用学过的知识做一些东西了。

    这里简单介绍下python参数解析argparse命令。

    使用argparse需要引用

     import argparse

     

    然后调用

    parser = argparse.ArgumentParser(

    ArgumentParser()函数可以传一些参数 

    parser = argparse.ArgumentParser(description='This is a PyMOTW sample program')

    参数有很多种类型,读者自己查阅,参考资料的链接:

    https://blog.ixxoo.me/argparse.html

    接下来添加参数

    parser.add_argument('file')

    parser.add_argument('-o', '--output')

    添加参数 -表示可选参数,用于一个字符,表示缩写

    --也是可选参数,用于两个或以上的字符

    最后是参数解析  

    parser.parse_args(['-o', 'output.txt'])

    parse_args()运行时,会用'-'来认证可选参数,剩下的即为位置参数。

    位置参数不可缺少,可选参数可提供默认值

    如果python程序运行,parse_args()会依次处理传入参数,

    第一个参数为该python程序的文件名,其余的依次为传入参数。

    这些文字看不懂不要紧,试着看看下边的程序和运行结果

    #-*-coding:utf-8-*-
    
    import argparse
    
    #命令行输入参数处理
    parser = argparse.ArgumentParser()
    
    parser.add_argument('file')     #输入文件
    parser.add_argument('-o', '--output')   #输出文件
    parser.add_argument('--width', type = int, default = 50) #输出字符画宽
    parser.add_argument('--height', type = int, default = 30) #输出字符画高
    
    #获取参数
    args = parser.parse_args()
    
    IMG = args.file
    WIDTH = args.width
    HEIGHT = args.height
    OUTPUT = args.output
    
    print("IMG is %s" %(IMG))
    print("WIDTH is %d" %(WIDTH))
    print("HEIGHT is %d" %(HEIGHT))
    print("OUTPUT is %s" %(OUTPUT))

     这个程序就是解析命令行参数,然后将输入的参数打印出来

    如果不输入参数直接python test.py 试试?

     提示缺少位置参数file

    试试python test.py test.png

    四个命令行参数打印出来了 

    --height 可选参数为默认值30

    --width 可选参数为默认值50

    file 位置参数为test.png

    -o 为--output的缩写为None,因为没提供默认值。我也没输入-o参数

    所以为None

    输入python test.py test.png --width 30 -- height 50 -o output.txt

    用全称--output录入也可以

     python test.py test.png --width 30 -- height 50 --output output.txt

     

    这个过了就可以往下做了,下面安装PIL库,PIL为python处理图形图像的基本库

    windows安装的方式为:

    http://jingyan.baidu.com/article/ff42efa929e6c8c19f220254.html

    Linux安装方式为:

    点击链接

     下面编写图片转字符画程序:

    将文件命名为print.py

    1 包含库和函数,定义基本的字符序列

    from PIL import Image
    import argparse
    
    #命令行输入参数处理
    parser = argparse.ArgumentParser()
    
    parser.add_argument('file')     #输入文件
    parser.add_argument('-o', '--output')   #输出文件
    parser.add_argument('--width', type = int, default = 50) #输出字符画宽
    parser.add_argument('--height', type = int, default = 30) #输出字符画高
    
    #获取参数
    args = parser.parse_args()
    
    IMG = args.file
    WIDTH = args.width
    HEIGHT = args.height
    OUTPUT = args.output
    
    ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'. ")

     2 编写转换函数

    # 将256灰度映射到70个字符上
    def get_char(r,g,b,alpha = 256):
        if alpha == 0:
            return ' '
        length = len(ascii_char)
        gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    
        unit = (256.0 + 1)/length
        return ascii_char[int(gray/unit)]

     0.2126 * r + 0.7152 * g + 0.0722 * b为官方提供的

    灰度计算公式,unit表示一个单元占多少灰度,

    gray/unit可以找到对应的单元,从而转换为字符。

    3调用get_char完成转换

    if __name__ == '__main__':
    
        im = Image.open(IMG)
        im = im.resize((WIDTH,HEIGHT), Image.NEAREST)
    
        txt = ""
    
        for i in range(HEIGHT):
            for j in range(WIDTH):
                txt += get_char(*im.getpixel((j,i)))
            txt += '
    '
    
        print (txt)
    
        #字符画输出到文件
        if OUTPUT:
            with open(OUTPUT,'w') as f:
                f.write(txt)
        else:
            with open("output.txt",'w') as f:
                f.write(txt)

    Image为PIL提供的类,可以看看

    Image基本功能 

    im.getpixel((j,i)) 通过传入横纵坐标,返回tuple

    tuple中数据依次为r,g,b,alpha

    之前讲过可以通过*() 或*[]实现逐个元素传入。

    get_char(*im.getpixel((j,i)))将参数传入返回字符。

    之后分别将字符打印出来,并写入文件。

    源码下载地址: python图片转字符画

    效果如下:

        

    谢谢关注,我的公众号:

     

    
    
  • 相关阅读:
    Twitter OA prepare: Rational Sum
    Java: Best Way to read a file
    Summary: gcd最大公约数、lcm最小公倍数算法
    Twitter OA prepare: Flipping a bit
    Twitter OA prepare: Equilibrium index of an array
    echo -e 参数
    openwrt 添加luci选项
    基于TLS的EAP 认证方法
    linux命令 dirname
    freeradius 错误: error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate
  • 原文地址:https://www.cnblogs.com/secondtonone1/p/6813266.html
Copyright © 2020-2023  润新知