标签: Python

  • python 获取某月的第一天零点和最后一天的时间 代码实例

    python 获取某月的第一天零点和最后一天的时间 代码实例

    在Python实际开发中我们可能会需要用到指定某个年月获取第一天到最后一天的时间,下面记录一下代码段:

    # -*- coding: utf-8 -*-
     
    import time
    import datetime
    import random
    import calendar
     
     
    def get_current_month_start_and_end(date):
        """
        年份 date格式: 2017-09-08
        :param date:
        :return: 本月第一天日期和本月最后一天日期
        """
        if date.count('-') != 2:
            raise ValueError('- is error')
        year, month = str(date).split('-')[0], str(date).split('-')[1]
        end = calendar.monthrange(int(year), int(month))[1]
        start_date = '%s-%s-01 00:00:00' % (year, month)
        end_date = '%s-%s-%s 23:59:59' % (year, month, end)
        return start_date, end_date
     
     
    if __name__ == '__main__':
        print(get_current_month_start_and_end('2019-05-24'))
  • Linux 系统中 rrdtool 生成的图出现中文乱码(方块中带数字) 解决办法 图文教程

    Linux 系统中 rrdtool 生成的图出现中文乱码(方块中带数字) 解决办法 图文教程

    问题描述

    最近在帮公司迁移python的系统时出现了rrdtool绘图中无法显示中文的问题,如下图所示:

    查了很久的资料发现基本上说的都是cacti的中文乱码。但是在cacti里,绘出来的图中文是可以正常显示的。后来我们又手动编译安装了几次rrdtool包括后来换了几次版本。但是都不能解决中文的问题。这里就不详细说明。下面我们具体说一下我们的排查步骤。

    问题排查步骤

    locale 命令确认终端环境已支持中文

    rrdtool命令行直接生成图片,查看是否有中文乱码

    为了确认不是python程序的问题,我们直接使用终端rrdtool命令生成图图片,命令如下:

    rrdtool graph test.png --imgformat=PNG --start=1591259400 --end=1591295400 --title='SH-05-G06-H5720-Core - 流量 - Eth-Trunk2 - (to guipinglu_H6810)' --base=1000 --height=120 --width=500 --alt-autoscale-max --lower-limit=0 COMMENT:"从 2020/06/04 16\:30\:00 到 2020/06/05 02\:30\:00\c" COMMENT:"  \n" --vertical-label='bits per second' --slope-mode --font TITLE:10: --font AXIS:8: --font LEGEND:8: --font UNIT:8: DEF:a="/var/www/html/rra/940/33165.rrd":traffic_in:MAX DEF:b="/var/www/html/rra/940/33165.rrd":traffic_out:MAX DEF:c="/var/www/html/rra/940/33165.rrd":traffic_in:AVERAGE CDEF:cdefa=a,8,* CDEF:cdefe=b,8,* CDEF:cdefi=a,UN,INF,UNKN,IF AREA:cdefa#00CF00FF:"流入"  GPRINT:cdefa:LAST:"当前\:%8.2lf %s"  GPRINT:cdefa:AVERAGE:"平均\:%8.2lf %s"  GPRINT:cdefa:MAX:"最大\:%8.2lf %s\n"  LINE1:cdefe#002A97FF:"流出"  GPRINT:cdefe:LAST:"当前\:%8.2lf %s"  GPRINT:cdefe:AVERAGE:"平均\:%8.2lf %s"  GPRINT:cdefe:MAX:"最大\:%8.2lf %s\n"  AREA:cdefi#8F9286FF:"" 

    但是发现在终端中就已经无法正常显示中文了。基本可以确定是系统环境的问题。

    结论:没有中文字体原因导致

    后来无意中想到,也许是没有中文字体造成的。后来经过安装了字体之后就可以显示中文了。Centos7 安装中文字体 图文教程。

  • 解决Nginx的connect() to 127.0.0.1:8080 failed (13: Permission denied) while connect

    解决Nginx的connect() to 127.0.0.1:8080 failed (13: Permission denied) while connect

    前篇文章我们写了 Docker 下使用Centos系统镜像安装 uwsgi 运行 Python3 Django ,我们在实际运行 Nginx+uWSGI 搭配时出现 502 Bad Getway ,在nginx的error.log错误日志中,我们可以看到如下:

     connect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream,

    经过一番检查以及google,应该是SeLinux的导致的。执行下面命令即可:

    setsebool -P httpd_can_network_connect 1

    关闭SELinux的两种方法

  • Python Django 修改文件后 不生效 解决办法

    Python Django 修改文件后 不生效 解决办法

    问题描述

    这里主要是在线上环境,我们上传代码后,发现没有生效。

    因为会生成.pyc文件。

    解决办法

    # 关闭所有 uwsgi进程,发现通过uwsgi --roload ****.pid 不一定有用
    killall -9 uwsgi
    # 启动 uwsgi
    uwsgi --ini /home/wwwroot/laoji.org/uwsgi.ini 
     
    # 重启一下nginx
    service nginx reload

  • windows下如何设置pip源为国内 图文教程

    windows下如何设置pip源为国内 图文教程

    在这里我使用清华源来做示范

    win+R 打开用户目录%HOMEPATH%,在此目录下创建 pip 文件夹,在 pip 目录下创建 pip.ini 文件, 内容如下,

    在pip文件夹里新建的pip.ini代码如下

    [global]
    timeout = 6000
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    trusted-host = pypi.tuna.tsinghua.edu.cn

    另外还有一些其他国镜像

    阿里云  http://mirrors.aliyun.com/pypi/simple/ 
    中国科技大学   https://pypi.mirrors.ustc.edu.cn/simple/ 
    豆瓣(douban)  http://pypi.douban.com/simple/ 
    清华大学  https://pypi.tuna.tsinghua.edu.cn/simple/ 
    中国科学技术大学  http://pypi.mirrors.ustc.edu.cn/simple/

  • Python 跨文件 function函数 定义全局变量 代码实例

    Python 跨文件 function函数 定义全局变量 代码实例

    老季是Python新手,下面我们记录一下如何跨文件定义一个全局变量。

    • cnc.py 主程序文件
    • func.py 功能函数文件
    • cmcc.py

    我们需要在main.py、cmss.py里定义了一个变量,lockfile 当然这里文件里的各个值是不同的。我们如何在func.py的函数里使用这个lockfile的值呢?

    开始我们使用的是 global lockfile 方法,这种只能在单文件里赋值,比如:

    lockfile = 1
    def jrun():
        global lockfile   
        return lockfile+2

    这样的话可以正常运行,返回3 。但是如果我们把jrun()放入到另外一个文件里,就无法运行了。因为在这个py模块中并没有一个叫做lockfile的变量,于是就会报错未定义。 下面我们给出正确的方法。

    cnc.py

    import func
    lockfile = '/tmp/laoji.org.cnc'
    func.GlobalVar.lockFileName = lockfile #赋值到func里
    func.t = 123
    a()

    func.py

    class GlobalVar:
        lockFileName = None
    t = None
    def a():
        xxx = GlobalVar.lockFileName #这里就可以调用到设置的lockFileName值
        global t
        # 这里也同样可以调用到t的值
        dosomething...

    cmc.py

    import func
    lockfile = '/tmp/laoji.org.cmc'
    func.GlobalVar.lockFileName = lockfile  #这里就可以调用到设置的lockfile值了
    func.t = 333
    a()

    这里仅仅提供思路,大家还要根据实际情况举一反三。

  • Python3 Django 文件下载 中文文件名乱码 解决方案

    Python3 Django 文件下载 中文文件名乱码 解决方案

    本文记录一下在python3 django web开发中,下载文件时文件名为中文,出现乱码的解决方案。

    前端:

    <a href="/download/">下载</a>

    url.py:

    urlpatterns = [
        path('download/', download)
    ]

    views.py:

    from django.http import FileResponse
     
    def download(request):
        file = open('./static/download/简历.docx', 'rb')
        response = FileResponse(file)
        response['Content-Type'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
        response['Content-Disposition'] = 'attachment;filename= '+'简历'.encode('utf-8').decode('ISO-8859-1')+'.docx'
        return response
    

    来解释一下download函数:

    1、首先是打开存放文件的目录,‘.’表示根目录,也就是你整个django项目的根目录。我的“简历.docx”文件就放在djangoProjectName/static/download/目录下。

    2、docx使用的MIME类型是 application/vnd.openxmlformats-officedocument.wordprocessingml.document。

    3、因为文件名中有中文,如果直接在Content-Disposition中包含中文会导致文件名无法正常显示,因此要以'简历'.encode('utf-8').decode('ISO-8859-1')的形式进行转码。

    网上搜到常用的有三种方法实现文件下载,我这边就试了这一种,其他你可以自己去搜一下然后试试。

  • Python django migrate 和makemigrations的实际应用举例

    Python django migrate 和makemigrations的实际应用举例

    测试环境中生成迁移

    在你改动了 model.py的内容之后执行下面的命令:

    python manager.py makemigrations

    相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py,

     但是这个改动还没有作用到数据库文件

    你可以手动打开这个文件,看看里面是什么

    生产环境中生成执行迁移

    python manager.py migrate

    将该改动作用到数据库文件,比如产生table之类

  • Django数据库分表代码实例

    Django数据库分表代码实例

    app名称为‘core’,基本的models.py文件内容如下:

    class Province(models.Model):
        name = models.CharField(u'省份名称',max_length=32)
        code = models.IntegerField(verbose_name=u'区号', unique=True)
        
        def __unicode__(self):
            return self.name
        
        class Meta:
            verbose_name = u'省份列表'
            verbose_name_plural = u'省份列表'

    法I:

    重构 manager 中的 get_query_set() 方法。

    需要说明的是:在 django 默认情况下,会为每一个models 类添加一个名为 objects 的 Manager,这个就是 Province.objects.all() 中 objects 的由来。

    修改后的 models.py 代码如下,表结构必须一致:

    # coding:utf-8
    from django.db import models
    # Create your models here.
    class ProvinceManager(models.Manager):
        def get_queryset(self):
    #         return super(ProvinceManager, self).get_queryset().filter(id=1)
            self.model._meta.db_table = 'core_province_1' # 我的app名为core
            return super(ProvinceManager, self).get_queryset()10         11     
    class Province(models.Model):
        name = models.CharField(u'省份名称',max_length=32)
        code = models.IntegerField(verbose_name=u'区号', unique=True)
        
        objects = ProvinceManager()
        
        def __unicode__(self):
            return self.name
        
        class Meta:
            verbose_name = u'省份列表'
            verbose_name_plural = u'省份列表'

    可以多写几个 Manager 来对应不同的表,同时对应多写几个不同的 objects(可以随意起名),在调用时调用相应的 Manager。

    法II:

    在哪里调用就在哪里更改。更改处添加代码如下:

    from core.models import Province
    Province._meta.db_table = 'core_prvoince_2'
    rows = Province.objects.all() 

    总结:

    不论哪种方法,其主要还是要更改 models 的 _meta.db_table 的值

  • Python3 生成随机密码 代码实例

    Python3 生成随机密码 代码实例

    Python3 生成随机密码 代码实例

    def generate_password():
        import random
        length = 64
        seed = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
        print(''.join(random.choice(seed) for _ in range(length)))
    
  • Python  时间戳、时间字符串、时间对象以及时间加减处理

    Python 时间戳、时间字符串、时间对象以及时间加减处理

    import time , datetime

    时间字符串加8小时

    timestring = “2019-12-21 10:22:56”

    转为时间戳

    timestamp = time.mktime(time.strptime(timestring, ‘%Y-%m-%d %H:%M:%S’))
    print timestamp # 1576894976.0

    datetime_struct = datetime.datetime.fromtimestamp(timestamp)
    print type(datetime_struct) #

    datetime_obj = (datetime_struct + datetime.timedelta(hours=8))
    print datetime_obj # 2019-12-21 18:22:56

    datetime_str = datetime_obj.strftime(‘%Y-%m-%d %H:%M:%S’)
    print datetime_str # 2019-12-21 18:22:56

  • Python3 机房间流量调度系统

    Python3 机房间流量调度系统

    场景需求

    公司有很多机房,但是由于机房见的流量价格不一致,所以如果可以的话需要尽量使用便宜的流量。以缩减流量的成本。

    解决方案

    使用2台设备作为调度中心,将所有需要调出的流量全部调到调度中心设备。然后将这些流量切成固定片数(80片)。然后通过Python脚本计算机房上联速率后决定切片去不同的机房。然后登录调度中心的交换机执行对应的traffic-policy命令。

    这里老季也是第一次使用Python,可以说是完完全全的边学python3边写项目。

    这里使用的是Django框架来写,因为简单快捷。Django适合一个人快速开发,可以在后台少些很多很多代码。

    相关文章

    实现功能

    一阶段调度( 所有机房流量均小于后台设定的95上限值)

    在流量足够的场景下,将调出的流量调度到每个机房,使得每个机房都不超过各机房的95上限。

    二阶调度(所有机房流量均大于95上限)

    在所有机房流量均超过95上限的场景下,通过后台设定的权重,优先将流量调度到权重小的机房。使其小于95阀值。

    当机房流量大于95阀值时,将超出95阀值的流量调往下一个机房。

WeChat
↑