精华内容
下载资源
问答
  • Python生成字符视频

    万次阅读 多人点赞 2021-05-15 21:19:14
    Python生成字符视频!卡卡西VS带土经典战役。

    Python生成字符视频

    一、前言

    在之前也写过生成字符视频的文章,但是使用的是命令行窗口输出,效果不是很好,而且存在卡顿的情况。于是我打算直接生成一个mp4的字符视频。大致思路和之前一样:Python20行代码实现视频字符化

    下面来看一个效果图:

    在这里插入图片描述

    二、OpenCV的操作图像

    我们先来看一些基本操作。首先我们需要安装OpenCV,执行下面语句:

    pip install opencv-python
    

    之后就可以使用了。

    2.1、读取和显示

    我们直接看代码:

    import cv2
    # 读取图片
    img = cv2.imread("1.jpg")
    # 显示图片
    cv2.imshow("img", img)
    cv2.waitKey()
    cv2.destroyAllWindows()
    

    其中waitKey是等待输入的函数,因为imshow之后显示一瞬间,所以我们需要调用它。而destroyAllWindows是释放窗口。

    2.2、灰度转换

    灰度转换就是将图片转换成黑白图片(灰色),这样可以方便我们处理像素。代码如下:

    import cv2
    img = cv2.imread("1.jpg")
    # 灰度转换
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    

    我们还可以直接以灰度形式读入:

    import cv2
    # 以灰度形式读入
    img = cv2.imread("1.jpg", 0)
    

    2.4、获取图片尺寸并修改尺寸

    我们直接看代码:

    import cv2
    img = cv2.imread("1.jpg", 0)
    # 获取图片的高宽
    h, w = img.shape
    # 缩放图片
    res = cv2.resize(img, (w//2, h//2))
    

    因为img的shape属性是一个元组,所以我们可以直接自动拆包。

    然后调用cv2.resize函数,第一个参数传入图片,第二个参数传入修改后的尺寸。

    2.5、绘制文字

    绘制文字我们需要调用cv2.putText函数,代码如下:

    import cv2
    img = cv2.imread('1.jpg')
    # 绘制文字
    cv2.putText(
        # 背绘制的图片
        img, 
        # 要绘制的文字
        'Hello',
        # 文字左下角的坐标
        (100, 500),
        # 字体
        cv2.FONT_HERSHEY_SIMPLEX,
        # 字体大小缩放
        20, 
        # 文字颜色
        (0, 0, 0),
        # 文字粗细
        10
    )
    

    我们只需要注意这些参数就好了。

    2.6、读取视频

    读取视频的操作一般是通用的,代码如下:

    import cv2
    # 读取视频
    cap = cv2.VideoCapture('1.mp4')
    # 获取视频的帧率
    fps = cap.get(cv2.CAP_PROP_FPS)
    # 循环读取图片的每一帧
    while True:
        # 读取下一帧
        ret, frame = cap.read()
        if not ret:
            break
        else:
            pass
    cap.release()
    

    上面我们获取的视频的帧,在写入视频的时候我们需要用到。

    2.7、写入视频

    写入视频的操作也是常规代码:

    import cv2
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    writer = cv2.VideoWriter('11.mp4', fourcc, fps, (w, h))
    # 写入视频
    writer.write(frame)
    ***
    write.release()
    

    有了这些知识,我们就可以开始下一步工作了。

    三、像素映射成字符

    对于只有一个通道的图片,我们可以把它当成一个矩形,这个矩形最小单位就是一个像素。而字符化的过程就是用字符替代像素点的过程。所以我们要遍历图像的每个像素点,但是我们应该用什么字符取代呢?

    我们颜色有一个参照表,而opencv将这个参数表切割成256份,代表不同的程度,我们也可以做一个参照表,不过表中的内容不是颜色,而是字符。

    在这里插入图片描述

    上图为颜色表,我们可以使颜色表和字符表建立映射关系。假如字符表如下:

    mqpka89045321@#$%^&*()_=||||}

    我们可以得到下列公式:

    在这里插入图片描述

    经过变换可以求得相应颜色对应字符表中的字符:

    在这里插入图片描述

    这个公式不理解也没关系,只需要会用即可。下面就是我们像素转字符的代码:

    def pixel2char(pixel):
        char_list = "@#$%&erytuioplkszxcv=+---.     "
        index = int(pixel / 256 * len(char_list))
        return char_list[index]
    

    这个字符表是可以自己定义的。

    四、生成字符图片

    现在我们只需要将像素逐个转换成字符就好了,代码如下:

    def get_char_img(img, scale=4, font_size=5):
        # 调整图片大小
        h, w = img.shape
        re_im = cv2.resize(img, (w//scale, h//scale))
        # 创建一张图片用来填充字符
        char_img = np.ones((h//scale*font_size, w//scale*font_size), dtype=np.uint8)*255
        font = cv2.FONT_HERSHEY_SIMPLEX
        # 遍历图片像素
        for y in range(0, re_im.shape[0]):
            for x in range(0, re_im.shape[1]):
                char_pixel = pixel2char(re_im[y][x])
                cv2.putText(char_img, char_pixel, (x*font_size, y*font_size), font, 0.5, (0, 0, 0))
        return char_img
    

    这里我们使用了一个np.ones函数,它的作用我们理解为生成一个黑色图片。

    生成的尺寸我们先除了scale,如何再乘font_size。scale是原图的缩小程度,因为像素有很多,所以我们需要先把图片缩小。而为了让我们的字体显示更清楚,我们需要把生成的字符图片放大。

    因此需要注意,虽然我们生成的图片看起来单调,但是当font_size设置为5时,得到的图片已经比较大了。因此当你生成长时间的视频时,会花费比较多的时间,生成的视频也比较大。

    我们来测试一下上面的函数:

    import cv2
    import numpy as np
    
    
    def pixel2char(pixel):
        char_list = "@#$%&erytuioplkszxcv=+---.     "
        index = int(pixel / 256 * len(char_list))
        return char_list[index]
    
    
    def get_char_img(img, scale=4, font_size=5):
        # 调整图片大小
        h, w = img.shape
        re_im = cv2.resize(img, (w//scale, h//scale))
        # 创建一张图片用来填充字符
        char_img = np.ones((h//scale*font_size, w//scale*font_size), dtype=np.uint8)*255
        font = cv2.FONT_HERSHEY_SIMPLEX
        # 遍历图片像素
        for y in range(0, re_im.shape[0]):
            for x in range(0, re_im.shape[1]):
                char_pixel = pixel2char(re_im[y][x])
                cv2.putText(char_img, char_pixel, (x*font_size, y*font_size), font, 0.5, (0, 0, 0))
        return char_img
    
    
    if __name__ == '__main__':
        img = cv2.imread('dl.jpg', 0)
        res = get_char_img(img)
        cv2.imwrite('d.jpg', res)
    
    

    效果如下:

    在这里插入图片描述

    可以看到效果还是很不错的。

    五、生成字符视频

    有了上面的代码,我们就可以对整个视频进行转换了。将视频转换成字符视频的代码如下:

    def generate(input_video, output_video):
        # 1、读取视频
        cap = cv2.VideoCapture(input_video)
    
        # 2、获取视频帧率
        fps = cap.get(cv2.CAP_PROP_FPS)
    
        # 读取第一帧,获取转换成字符后的图片的尺寸
        ret, frame = cap.read()
        char_img = get_char_img(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), 4)
    
        # 创建一个VideoWriter,用于保存视频
        fourcc = cv2.VideoWriter_fourcc(*'mp4v')
        writer = cv2.VideoWriter(output_video, fourcc, fps, (char_img.shape[1], char_img.shape[0]))
        while ret:
            # 读取视频的当前帧,如果没有则跳出循环
            ret, frame = cap.read()
            if not ret:
                break
            # 将当前帧转换成字符图
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            char_img = get_char_img(gray, 4)
    
            # 转换成BGR模式,便于写入视频
            char_img = cv2.cvtColor(char_img, cv2.COLOR_GRAY2BGR)
            writer.write(char_img)
        writer.release()
    

    下面是卡卡西经典战役的字符视频片段:

    在这里插入图片描述

    完整代码如下:

    import cv2
    import numpy as np
    
    
    def pixel2char(pixel):
        char_list = "@#$%&erytuioplkszxcv=+---.     "
        index = int(pixel / 256 * len(char_list))
        return char_list[index]
    
    
    def get_char_img(img, scale=4, font_size=5):
        # 调整图片大小
        h, w = img.shape
        re_im = cv2.resize(img, (w//scale, h//scale))
        # 创建一张图片用来填充字符
        char_img = np.ones((h//scale*font_size, w//scale*font_size), dtype=np.uint8)*255
        font = cv2.FONT_HERSHEY_SIMPLEX
        # 遍历图片像素
        for y in range(0, re_im.shape[0]):
            for x in range(0, re_im.shape[1]):
                char_pixel = pixel2char(re_im[y][x])
                cv2.putText(char_img, char_pixel, (x*font_size, y*font_size), font, 0.5, (0, 0, 0))
        return char_img
    
    
    def generate(input_video, output_video):
        # 1、读取视频
        cap = cv2.VideoCapture(input_video)
    
        # 2、获取视频帧率
        fps = cap.get(cv2.CAP_PROP_FPS)
    
        # 读取第一帧,获取转换成字符后的图片的尺寸
        ret, frame = cap.read()
        char_img = get_char_img(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), 4)
    
        # 创建一个VideoWriter,用于保存视频
        fourcc = cv2.VideoWriter_fourcc(*'mp4v')
        writer = cv2.VideoWriter(output_video, fourcc, fps, (char_img.shape[1], char_img.shape[0]))
        while ret:
            # 读取视频的当前帧,如果没有则跳出循环
            ret, frame = cap.read()
            if not ret:
                break
            # 将当前帧转换成字符图
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            char_img = get_char_img(gray, 4)
    
            # 转换成BGR模式,便于写入视频
            char_img = cv2.cvtColor(char_img, cv2.COLOR_GRAY2BGR)
            writer.write(char_img)
        writer.release()
    
    
    if __name__ == '__main__':
        generate('in.mp4', 'out.mp4')
    
    

    我们只需要修改generate的参数就好了。完整效果视频如下:

    Python生成字符视频-卡卡西VS带土

    展开全文
  • 最近接触一个项目需要根据数据自动生成持股关系较为复杂的股权关系图,之所以说复杂主要体现在股权层级多,还有一些特殊持股方式,比如一个子公司在集团内有多家公司持股,还有相互持股等情况,这些情况用VIsio等...

    一、为啥用Graphviz?

    最近接触一个项目需要根据数据自动生成持股关系较为复杂的股权关系图,之所以说复杂主要体现在股权层级多,还有一些特殊持股方式,比如一个子公司在集团内有多家公司持股,还有相互持股等情况,这些情况用Visio等常规手动绘图工具就不好用了。
    Graphviz (Graph Visualization Software) 是一个由AT&T实验室启动的开源工具。她使用DOT语言来描述图形的节点、连线及属性等,可以大大减少手绘图形调整图形格式的时间,而将主要精力放在图形的逻辑关系上。而且可以根据需要设置生成图像的格式,如PDF、JPG等。
    用Python调用主要因为可以方便地进行迭代等数据处理,从而实现根据数据自动生成图像。

    二、在Python中安装Graphviz库

    pip install graphviz
    

    三、安装并配置Graphviz

    光是在Python中安装了Graphviz库还不能画图,必须要安装Graphviz这个工具并在Windows系统中把bin文件夹的路径加入到环境变量path里。
    1、Graphviz官网安装包(msi)地址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html
    2、关于如何配置环境变量可以参考这篇文章:
    https://zhuanlan.zhihu.com/p/35639711

    四、DOT语法

    Python中调用DOT语法比较简单,可以参考:
    1、官方文档(英文):
    https://graphviz.readthedocs.io/en/stable/manual.html
    2、一些节点、连线的字体、形状、颜色等属性参数的设置可以参考这篇文章:
    python graphviz的使用(画图工具)https://blog.csdn.net/weixin_30314813/article/details/101197728

    五、代码

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from graphviz import Digraph
    #下面L中为需要填写的数据,字段分别为“序号”、“父单位”、“父单位层级”、“子单位”、“子单位层级”、“父单位持股比例 ”,可以填在excel中后,用百度的Echarts表格工具转换为该格式
    L=[
        [1, 'A公司', 1, 'B1公司', 2, '70.00%'],
        [2, 'A公司', 1, 'B2公司', 2, '50.00%'],
        [3, 'A公司', 1, 'B3公司', 2, '40.00%'],
        [4, 'B1公司', 2, 'C1公司', 3, '10.00%'],
        [5, 'B1公司', 2, 'C2公司', 3, '20.00%'],
        [6, 'B1公司', 2, 'C3公司', 3, '30.00%'],
        [7, 'B2公司', 2, 'C3公司', 3, '40.00%'],
        [8, 'B2公司', 2, 'C4公司', 3, '35.00%'],
        [9, 'B3公司', 2, 'C4公司', 3, '20.00%'],
        [10, 'B3公司', 2, 'C5公司', 3, '30.00%'],
        [11, 'C4公司', 3, 'C5公司', 3, '30.00%'],
        [12, 'C5公司', 3, 'B1公司', 2, '10.00%']
    ]
    dic={}
    father_name_list=[]
    child_name_list=[]
    equity_portion_list=[]
    for i1 in range(len(L)):
        M=L[i1]
        father_name=M[1]
        father_name_list.append(M[1])
        father_layer=M[2]
        child_name=M[3]
        child_name_list.append(M[3])
        child_layer=M[4]
        equity_portion=M[5]
        equity_portion_list.append(M[5])
        for x in father_name:
            dic[father_name]=father_layer   #生成父单位名称和对应的层级(用字典考虑去重)
        for y in child_name:
            dic[child_name]=child_layer     #将子单位名称和对应的层级也添加到字典中
    
    name_layer_list = sorted(dic.items(), key=lambda x: x[1]) #对字典按值(value)进行排序(默认由小到大)
    
    u=[]
    for z in name_layer_list:
        company_name=z[0]
        layer=z[1]
        u.append(z[1])
    number_of_layers=max(u) #计算出层数
    
    #按各公司的层数生产分层的节点:
    g=Digraph(name='复杂股权结构图')
    
    for key in dic:
        for n in range(number_of_layers+1):
            if dic[key]==n:
                with g.subgraph() as layer_n:
                    layer_n.attr(rank='same')
                    layer_n.node(name=key,color='blue',shape='box',fontname='Microsoft YaHei')
    
    #生产各节点间的连线:
    for i2 in range(len(L)):
        g.edge(father_name_list[i2],child_name_list[i2],label=equity_portion_list[i2],color='red',fontname='Microsoft Yahei')
    
    g.view()  
    

    六、操作步骤

    代码中需要的数据L可以按以下模板在Excel中填好后,用百度的Echarts表格工具转换为JavaScript格式(偷个懒,没有写Python调用Excel的模块)。
    1、先按如下Excel模板填入股权数据:
    在这里插入图片描述
    2、再用百度Echarts的表格工具装换成JavaScript格式后替代代码中的L部分:
    在这里插入图片描述
    3、运行代码

    七、结果

    运行代码后自动生成如下PDF、JPG等图像:
    在这里插入图片描述

    八、待优化事项

    节点之间生成的连线有些为曲线,在公司较多时不太美观,用折线要好看些。如果不用Python调用,直接用Graphviz画才能将图属性设置为splines=“line"或者"ortho”(强制边缘是直的,没有曲线或角度折线),但是Python的Graphviz貌似没有这个属性可以设置,我还要再研究研究。
    Graphviz官方文档:http://graphviz.org/doc/info/attrs.html

    展开全文
  • python opencv minAreaRect 生成最小外接矩形

    万次阅读 多人点赞 2017-08-03 11:05:33
    使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是点集数组或向量(里面存放的是点的坐标),并且这个点集中的元素不定个数。 2、举例说明: 画一个任意四边形(任意多边形都...

    方法

    使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是点集数组或向量(里面存放的是点的坐标),并且这个点集中的元素不定个数。

    举例说明

    画一个任意四边形(任意多边形都可以)的最小外接矩形,那么点集 cnt 存放的就是该四边形的4个顶点坐标(点集里面有4个点)

    cnt = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]]) # 必须是array数组的形式
    rect = cv2.minAreaRect(cnt) # 得到最小外接矩形的(中心(x,y), (宽,高), 旋转角度)
    box = cv2.cv.BoxPoints(rect) # 获取最小外接矩形的4个顶点坐标(ps: cv2.boxPoints(rect) for OpenCV 3.x)
    box = np.int0(box)
    # 画出来
    cv2.drawContours(img, [box], 0, (255, 0, 0), 1)
    cv2.imwrite('contours.png', img)

    函数 cv2.minAreaRect() 返回一个Box2D结构rect:(最小外接矩形的中心(x,y),(宽度,高度),旋转角度),但是要绘制这个矩形,我们需要矩形的4个顶点坐标box, 通过函数 cv2.cv.BoxPoints() 获得,返回形式[ [x0,y0], [x1,y1], [x2,y2], [x3,y3] ]。得到的最小外接矩形的4个顶点顺序、中心坐标、宽度、高度、旋转角度(是度数形式,不是弧度数)的对应关系如下:

    注意:

    • 旋转角度θ是水平轴(x轴)逆时针旋转,直到碰到矩形的第一条边停住,此时该边与水平轴的夹角。并且这个边的边长是width,另一条边边长是height。也就是说,在这里,width与height不是按照长短来定义的。
    • 在opencv中,坐标系原点在左上角,相对于x轴,逆时针旋转角度为负,顺时针旋转角度为正。所以,θ∈(-90度,0]。

     

     

     

    展开全文
  • 2,sorted,为避免形成[A,B]和[B,A]两种本质上相同的关系,使用sorted排序,可以防止出现前述的AB两种关系; 3,itertools库中的combination,[A,B,C]只形成[A,B],[A,C],[B,C]三种关系,符合我们的需求; 4,...

    一,先说实现的思路

    1,将文本中出现的重要人物名字放入列表中;也可以使用自然语言处理工具将词性标记为‘nr’的词语放入列表中,但一则费时费力二则准确性太差。所以,简单粗暴但高效的做法是直接从搜索引擎中得到主要人物的名称,并将其放入列表中;

    2,遍历文本的第一个段落,并检查人物名称是否在此段落中,如果在,将其放入一个空列表中,并使用combination将其转化成人物名称的两两组合;这是很关键的一步,只有得出了人物关系,才可能实现可视化。

    3,使用Networkx实现人物关系的可视化,这个操作很简单,但如果想优化节点和线,还是有一些难度的。贴上代码后再详细说明此点。

    二,使用到的内置或三方库;

    1,set,在遍历文本的每一个段落时,形成的列表中会有多个重复的人物名称,使用set可以去除重复的人名;

    2,sorted,为避免形成[A,B]和[B,A]两种本质上相同的关系,使用sorted排序,可以防止出现前述的AB两种关系;

    3,itertools库中的combination,[A,B,C]只形成[A,B],[A,C],[B,C]三种关系,符合我们的需求;

    4,collections中的Counter,统计每一对关系在列表中出现的次数,形成一个字典;

    5,networkx库,使用networkx.draw_circular,让人物以圆的形式排列在图片上。

    三,networkx.draw_circular parameter的详细解说:

    1,nodelist和node_size,引用g.degree的键值,可通过映射在图表上反映节点的大小,出现越多的节点,在图表上也越大;

    2,node_color和cmap,node_color是一个列表,通过colormap与plt.cm.parameter形成映射,在图表上反映为节点的颜色,具体的颜色值可以参考https://matplotlib.org/gallery/color/colormap_reference.html

    3,edge_color和edge_cmap,edge_color也是一个列表,通过edge_cmap与plt.cm.parameter开成映射,在图表上表现为边的颜色;

    4,width,width也是一个列表,引用自边的值,即人物关系字典的值;

    四,图片比例尺,分辨率和将文本插入到图片中;

    1,比例尺,在绘图前使用plt.figure(figsize=(turple))来确定每个像素块的比例尺;

    2,分辨率,DPI与比例尺的结合,其中dpi在保存文件的命令savefig中引用,默认值是100;

    3,将文本插入图片,x,y指插入的位置,中间为0,0,边上为+/-1。

    五,附上两张效果图。

     

    六,附上源代码。

    from collections import Counter
    from itertools import combinations
    import networkx as nx
    import matplotlib.pyplot as plt
    def getRelationiship(fn):
        namelist=['无忌','赵敏','芷若','小昭','殷离','成昆','谢逊','灭绝','翠山','殷素素','纪晓芙','杨逍','杨不悔','范遥','金花婆婆',
                  '张三丰','殷天正','韦一笑','宋青书','丁敏君','宋远桥','俞岱岩','殷梨亭','殷野王','阳顶天','阳夫人','朱九真','空见大师',
                  '空智大师','周颠','王保保','黄衫女子','王难姑','俞莲舟','张松溪','莫声谷','鹿杖客','鹤笔翁','渡厄','渡难','渡劫','韩千叶'
                ,'常遇春','铁冠道人','彭莹玉','说不得','冷谦','鲜于通','何太冲','班淑娴','高老者','矮老者']
    
        fo=open(fn,'r',encoding='utf-8').readlines()
        relationlist=[]
        for lines in fo:
            n=[]
            for i in namelist:
                for j in namelist[namelist.index(i)+1:]:
                    if i in lines and j in lines and i!=j:
                        n.append(i)
            relationlist+=combinations(sorted(set(n)),2)
        relationDict=Counter(relationlist)
        return relationDict,namelist
    
    def createRelationship(fn):
        relationDict,namelist=getRelationiship(fn)
        edgeWidth=[]
        for i in relationDict.values():
            edgeWidth.append(i/5)
        # print(edgeWidth)
        print(len(edgeWidth))
        plt.figure(figsize=(16, 9))#图片比例尺,跟dpi合并计算后就是图片的分辨率,注意figure要放在画图开始前
        g=nx.MultiGraph()
        g.add_edges_from(relationDict.keys())
        d=dict(g.degree)
        nx.draw_circular(g,nodelist=d.keys(),node_size=[v*200 for v in d.values()],node_color=range(46),cmap=plt.cm.Paired,
                         with_labels=True,edge_color=range(385),edge_cmap=plt.cm.Dark2,alpha=1.0,width=edgeWidth)
        # node_color,要使用报错提醒的数字,edge_color使用len(edgewidth),但直接引用报错。
        #nodelist节点名称,node_size节点大小,node_color&cmap节点颜色的映射,edge_color&edge_cmap线颜色的映射,width宽度的值
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.text(-1.05,1.05,'%s-人物关系(线越宽代表联系越紧密,点越大表示出现的次数越多)'%fn[:-4],fontsize=12)#-1,1字体位置
        plt.savefig('%s-=人物关系图.png'%fn[:-4],dpi=120)#单个像素的DPI

    2020年6月16日更新:

    因为源代码不在这台电脑上,只针对其中不明确的地方做个说明:

    1,46,是人物节点的数量,可以使用len(namelist)代替;

    2,385,是边的数量,可以使用len(relationDict)代替;

    3,node_size使用的是matplotlib里scatter的规格值,默认是300,到底怎么算出来的,我看了官方文档,也做过计算,都没搞明白。

    很抱歉,初学时的代码,有点混乱,但大概能看明白的。

    感谢阅读!

     

    展开全文
  • Python随机数生成方法

    千次阅读 2015-08-19 20:35:34
    如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文章的介绍。 random....
  • python偷菜程序 python生成XML文件 UTF-8 GBK UTF8 GB2312 之间的区别和关系
  • python脚本自动生成需要文件

    千次阅读 2016-07-20 17:09:51
    python脚本自动生成需要文件在工作中我们经常需要通过一个文件写出另外一个文件,然而既然是对应关系肯定可以总结规律让计算机帮我们完成,今天我们就通过一个通用文件生成python脚本来实现这个功能,将大家从每日...
  • python基础

    万次阅读 多人点赞 2018-06-17 01:14:53
    2、在python中,所有数据类型都被视为对象,也可以自定义对象。自定义对象数据类型就是面向对象中的概念 面向对象术语简介 1、(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象...
  • Python】如何生成柯西分布随机数

    千次阅读 2018-07-13 10:37:57
    Python生成标准柯西分布的函数是:numpy.random.standard_cauchy(size),我就在想,能否生成一个非标准的柯西随机数呢?那么面临几个问题:(1)标准柯西随机数和非标准可惜随机数之间有没有之间转化关系?(没有...
  • 本来想根据已有的word做模板,添加些新生成的数据进去,没想明白是根据什么找想替换或者插入的地方的,二来要插入的图表文字也不少,所以干脆所有的都现生成吧,由于没怎么考虑效率,做下来这样也是可行的。...
  • Python - 使用pycallgraph生成函数关系

    千次阅读 2018-11-22 23:24:00
    可用于创建python函数关系图,依赖于dot命令,需要先安装 graphviz; HomePage:http://pycallgraph.slowchop.com/ Docs:https://pycallgraph.readthedocs.io/en/master/ 2- 安装pycallgraph 安装...
  • Python中的 生成器、迭代器

    万次阅读 2020-05-31 16:42:11
    迭代的概念 上一次输出的结果为下一次输入的初始值,重复的过程称为迭代,每次重复即一次迭代,并且... 使用可以实现你自己的迭代器,但无法实现生成器。 生成器运行速度快,语法简洁,更简单。 迭代器更能节约内存。
  • 免费软件,可自动分析C/C++/Java/Python/C#/Objective-C等项目的源代码并生成流程图和函数调用关系图。生成的流程图可以和源代码互相定位,有助于分析源代码,是阅读其他人写的代码或者自己很久前写的代码的利器。
  • python如何生成随机数

    千次阅读 2019-12-06 01:55:05
    如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文章的介绍。 随机生成 ...
  • python生成器详解

    千次阅读 2017-08-16 22:39:18
    python生成器和python装饰器几乎平起平坐,在python世界中占有重要的地位。如果说python装饰器是为了让程序员悄无声息拓展函数功能,那么python生成器就是为了让你的代码更省资源,更高效!说实话python生成器的抽象...
  • 如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文章的介绍。 random.random...
  • Python生成词云图

    千次阅读 2021-03-01 09:29:15
    基于Python的词云生成类库,很好用,而且功能强大。在做统计分析的时候有着很好的应用,比较推荐。 github:https://github.com/amueller/word_cloud 官方地址:https://amueller.github.io/word_cloud/ 2.快速生成词云 ...
  • 详解Python中yield生成器的用法

    千次阅读 2015-08-06 08:44:26
    yield是生成的意思,但是在python中则是作为生成器理解,生成器的用处主要可以迭代,这样简化了很多运算模型(还不是很了解是如何简化的)。 yield是一个表达式,是有返回值的. 当一个函数中含有yield时,它不再是...
  • 什么是Python生成器?与迭代器的关系是什么?

    千次阅读 多人点赞 2019-06-27 23:06:43
    生成器是一个特殊的迭代器,它保存的是算法,每次调用next()或... 生成器表达式是通过一个Python表达式语句去计算一系列数据,但生成器定义的时候数据并没有生成,而是返回一个对象,这个对象只有在需要的时候才根据...
  • 什么是Python生成器?与迭代器的关系是什么?.pdf
  • 运行Python脚本时生成的__pycache__文件夹

    万次阅读 多人点赞 2017-06-20 16:55:37
    python编写好一个工程,在第一次运行后,总会发现工程根目录下生成了一个__pycache__文件夹,里面是和py文件同名的各种 *.pyc 或者 *.pyo 文件。
  • Django是一个MVT框架: M:model模型。 设计与数据库交互的模型...根据模型自动生成数据库表 1、应用中的models.py中定义模型。 2、根据模型类生成迁移文件  命令:python manage.py makemigrations 3、...
  • 利用graphviz软件和pycallgraph库自动生成Python代码函数调用关系图 @Author:CSU张扬 @Email:csuzhangyang@gmail.com or csuzhangyang@qq.com 参考:...
  • python 生成xml

    千次阅读 2017-12-15 10:15:23
    用到这个模块的时候,感觉网上大部分...1.doc=xml.dom.minidom.Document()#生成xml的dom树对象 2.root=doc.createElement("root")#创建树节点,可以使根节点或者是子节点 3.child.setAttribute('value',value)#设置节点
  • 但是在命令行使用pycallgraph时总是出错,查阅了文档,还是报错,后来查看了python的scripts文件夹,发现这里的pycallgraph不像autopep8之的exe文件,而是去掉了.py的python文件,看样子只能在命令...
  • PyTorch实现“学习使用生成式对抗网络发现跨域关系
  • Python 生成个性二维码

    千次阅读 热门讨论 2018-08-06 10:54:39
    本课程通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小、是否在现有图片的基础上生成、是否生成动态二维码。 1.2 知识点 Python3基础 MyQR库 1.3 效果截图 1.3.1 普通二维码(浏览器扫码,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 184,993
精华内容 73,997
关键字:

python类关系生成

python 订阅