分类: python

  • Python 3通过API给NAS里的电源获取电影字幕[开源小工具]

    Python 3通过API给NAS里的电源获取电影字幕[开源小工具]

    此项目Gitee的开源地址:

    git clone git@gitee.com:itgeeker/python3_grab_subtitle.git

    项目的测试环境

    • 硬件环境:Synology 418play DSM6.2.3群辉系统
    • Python版本: Python3.8.2
    • Python模块:
           json, pathlib, platform, requests, urllib.request

    项目实现的功能

    • !!!会自动删除目录里文件总大小 < 100M的目录
    • 适用于视频文件有单独目录的电影,例如中国高清网下载的影片
    • 搜索电影名称依据目录名称来进行,不是视频文件名

    群辉Synology NAS需要引入的Python3模块

    import json
    #python3.4版本之后才支持pathlib
    from pathlib import Path
    from sys import platform
    import requests
    import urllib.request
    • 如果你碰到Synology群辉NAS Python3没有PIP

    Synology群辉NAS Python3如何安装PIP

    使用pathlib获取或设定NAS电影的目录

    def get_root_dir():
        root_dir = ''
        if platform == "linux" or platform == "linux2":
            print('linux')
            root_dir = Path('/volume1/video/film_new')
        elif platform == "darwin":
            print('OS X')
        elif platform == "win32":
            print('# Windows...')
            # root_dir = Path(r'D:\test')
            root_dir = Path(r'\\YOUR_NAS\video', 'film_new')
        return root_dir
    if __name__ == '__main__':
        root_dir = get_root_dir()
        print(root_dir)

    这里要注意的是,如果你在自己电脑上用win10来调试的时候,NAS的局域网路径的写法是:root_dir = Path(r’\\YOUR_NAS\video’, ‘film_new’)

    by itgeeker.net
  • Ubuntu/Debian/Raspbian源码编译安装Python3.8 及默认版本选择配置

    Ubuntu/Debian/Raspbian源码编译安装Python3.8 及默认版本选择配置

    Python 2 即将退出历史舞台,赶紧熟悉python 3的安装及配置吧。

    1. 安装编译依赖包

    sudo apt update
    sudo apt-get install -y build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev tar wget vim

    2.下载python3.8源代码

    cd /tmp && wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
    tar -zxf Python-3.8.0.tgz
    cd Python-3.8.0

    3.编译及安装python3.8

    ./configure --enable-optimizations
    make -j 4 #如果你的系统有8核,可以使用-j 8
    make altinstall

    不要使用标准make来安装,否则会覆盖系统默认的python版本

    by ITGeeker

    4.python3.8版本确认

    python3.8 --version

    5.设置python3.8版本为默认版本

    python -V #查看当前默认版本
    echo "alias python='/usr/local/bin/python3.8'" >> ~/.bashrc #刚刚编译安装目录
    source ~/.bashrc
    python -V #确认是否已切换成功

    echo “alias python=’/usr/bin/python3.7′” >> ~/.bashrc #切换到python3.7 apt安装版本

    by ITGeeker
  • python模块管理 pip临时使用及永久镜像配置

    python模块管理 pip临时使用及永久镜像配置

    pip安装依赖包速度很慢,此时您可能需要使用国内镜像来加速,特别是配置Home Assistant时,可能就是因为无法获取依赖包而配置失败。

    pip临时使用镜像安装python依赖包

    可以在使用pip的时候,加上参数-i和镜像地址,如果讨厌安全提示,添加 –trusted-host. 例如临时使用清华镜像安装python模块:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas --trusted-host tuna.tsinghua.edu.cn

    pip永久使用镜像安装python依赖包

    首先查看当前用户是否有pip配置文件:

    cat ~/.pip/pip.conf

    Windows的pip配置文件位于:

    %HOME%\pip\pip.ini

    by ITGeeker

    如果没有该文件,手动创建一个

    mkdir -p ~/.pip
    vi ~/.pip/pip.conf

    如果想使用阿里云镜像,请添加:

    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple
    [install]
    trusted-host = mirrors.aliyun.com

    注意:新版ubuntu要求使用https源

    by ITGeeker

    如果你有root权限,那么就全局更改吧:

    echo -e "
    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple
    [install]
    trusted-host = mirrors.aliyun.com
    extra-index-url=https://www.piwheels.org/simple">/etc/pip.conf
    cat /etc/pip.conf

    国内常用pip镜像包括:

    1. 阿里云 http://mirrors.aliyun.com/pypi/simple/
    2. 豆瓣http://pypi.douban.com/simple/
    3. 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
    4. 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
    5. 华中科技大学http://pypi.hustunique.com/
  • Python处理文件名或路径名中无法decode代码问题

    Python处理文件名或路径名中无法decode代码问题

    首先讨论的是python 2处理时的问题,其实不是单单指中文名的问题,即使是中文名称,如果能够decode还是没问题的,比如用如下这些方法:

    • – coding: utf-8 –– 或者 –– coding: gbk –
    • 强制utf-8
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    • .decode(‘gbk’).encode(‘utf-8’)
    • unicode(path_name,’utf8′)

    当然path前加r, 或者wingdows转用反斜杠,然后用了这四种方法还不行,windows下执行提示windows error 123之类的错误,发现文件名中会有无法decode的符号问号 ?的,基本就是在python 2之下无法解决了。

    Windows Error错误参考:

    • WindowsError:[Error 2]        不存在这个文件
    • WindowsError:[Error 3]        没有这个路径
    • WindowsError:[Error 5]        权限问题
    • WindowsError:[Error 13]       该文档被其它程序占用,处理不了  
    • WindowsError:[Error 123]      路径语法有误
    • WindowsError:[Error 145]      目录非空,多在删除非空目录时出现

    不要再花时间去解决python 2处理文件名的问题了,基本无法解决的,还是转用python 3吧,ITGeeker技术奇客测试已完美解决,用的是python 3.6的版本,而且是WSL的Ubunt版本测试的。而且现在更新到win10 2019 May的更新版,可以在微软商店直接下载3.7官方版本了,这是催促大家赶紧放弃python 2的节奏。

    Python 3.6默认使用utf-8编码,当然你也可以再加上reload在文件首,但和python 2有所不同:

    import importlib
    import sys
    importlib.reload(sys)
  • Python根据年龄计算出生年份

    Python根据年龄计算出生年份

    不管通过中文或英文搜索通过年龄来计算出生年份或日期,结果都是教你如何用生日计算年龄的,ITGeeker技术奇客认为应该也有这方面的需求,在此分享自己的代码。

    当然反过来计算是无法计算出生日,只能计算出年份,所以不是准确的生日日期。这个代码是在计算出年份后补全月日,把字段存到date格式里,方便日后计算年龄用。

    # -*- coding: utf-8 -*-
    ##############################################################################
    #    GeekerMaster奇客大师 www.geekermaster.com
    #    Copyright 2019 ITGeeker <alanljj@gmail.com>
    ##############################################################################
    from datetime import datetime, date, timedelta
    
    
    tday = date.today()
    print ('tday: '+str(tday))
    #假设年龄40岁
    age = 40
    birthday_year = tday.year - 40
    birthday_mg = str(birthday_year) + '-01-01' #这里的月份和日期是为了补全格式
    birthday_full_df = datetime.strptime(birthday_mg, "%Y-%m-%d").date() #格式化为date格式
    print ('birthday_full_df: '+str(birthday_full_df))
  • Odoo timezone时差调整 方法 时区调整

    Odoo timezone时差调整 方法 时区调整

    文章最后更新于2023-05-17

    by itgeeker.net

    最近在开发Odoo整合VOIP电话(供应商称为云电话)到奇客大师(GeekerMaster)系统时,返回的log说是时间戳错误。供应商说每次post的url的时效性是1分钟,检查发现后,我们每次发送Post请求的时候都会重新产生一遍,应该不存在时间过期的问题。

    用 _logger.warning打印变量值,发现Odoo服务器发送post的时间和我们当前Asia/Shanghai时区的时间是不同的,比当前电脑时间早了8个小时。而在系统端用date查询时间是正确的。应该是Odoo系统采用UTC时间的问题。

    Odoo系统前端页面显示是当前时区的时间,视图渲染时对datetime类型的字段做了时区调整,但后台数据库记录用的是UTC时间,并没有做时区调整,据说这是解决全球性使用一个系统的时间差问题的最好方法。

    这次ITGeeker技术奇客碰到的问题是国内的云电话供应商用的是北京时间UTC+8时区(Asia/Shanghai),所以只好调整代码来解决这个问题了。

    Odoo调整时差方法一 timedelta(hours=8)

    直接加8个小时,直观又方便。后面的时间格式根据要求可以更改。

    import datetime
    from datetime import timedelta
    
    now = (datetime.datetime.now() + timedelta(hours=8)).strftime("%Y%m%d%H%M%S")

    Odoo调整时差方法二 pytz

    import datetime
    import pytz
    
    user_tz = self.env.user.tz
    # local_tz = pytz.timezone(user_tz)
    now = datetime.datetime.now(pytz.timezone(
                user_tz)).strftime("%Y%m%d%H%M%S")

    Odoo要在”首选项”配置里设置好自己的时区为Asia/Shanghai,否则无法读取到您当前的时区。

    Odoo调整时差方法三 dpkg-reconfigure tzdata

    服务器端,例如Ubuntu使用 dpkg-reconfigure tzdata 设置时区,设置为UTC时区,使得您当前的时间和UTC时间一致。

    这里有个小提示: strftime和 strptime是不同的,一个是输出显示时间的样式,后者是输出时间的格式。

    ITGeeker技术奇客最近也调试了阿里云的短信,阿里用的时间格式就和时差无关,用的GMT时间。分享一下用python实现阿里短信所需要的时间格式:

    import time
    
    now = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())

    UTC确立以后UTC(GMT)=UTC(+0)作为一般提到的世界时,GMT表示零时区的时刻。 … 格林威治时间(GMT)是一个比较模糊的概念。 在1928年,GMT就是世界时。 在UTC被广泛采用后,我们提到的GMT实际上是UTC时间,或者说零时区的标准时。

    所以说用UTC是最好的解决方案。
奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4