PyCharm与python快速开发

  created  by  鱼鱼 {{tag}}
创建于 2020年08月23日 15:00:39 最后修改于 2021年01月16日 16:38:24

    Python语言作为“胶水语言”,简单易学,开发周期快,功能和扩展性强大,类库丰富。只依赖一门Java并不适用于所有情况,譬如快速开发一次性脚本(修复数据),通过使用Python效率更高,本篇文章旨在介绍本人快速入门Python的一些tips。注意,一些Python的基本语法在此不予介绍,推荐前往廖雪峰的博客查看,博客基于Python3.8版本。关于编译器等配置内容参考PyCharm帮助文档

环境搭建和下载安装

    从Python官网下载Python并安装,配置环境变量,安装PyCharm(这里 我们使用它作为IDE),这里略过。

依赖管理:Pip和Pipenv

    pip是python的包管理与安装工具,当你安装python后,pip也会随之被安装。Pipenv是基于Pip的依赖包管理,通过pipfile管理python程序的依赖,有点类似maven。其他还有Virtualenv,此处先不讨论。

site-packages

    简单介绍下site-packages,site-packages是python使用pip下载第三方模块的统一存档,在python代码中使用import时,site-packages的目录会成为其中一个被搜索的path。对,有点类似于maven的local仓库。

安装pipenv和配置源

    在配置过python后,确认下已经能使用pip:

$ pip --version

    pip默认的源为 https://pypi.org  ,国内会比较慢甚至超时,可以切换成阿里的镜像源 http://mirrors.aliyun.com/pypi/simple ,直接在install时添加 -i [源地址]即可,也可以创建 用户目录/pip/pip.ini并配置:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = https://mirrors.aliyun.com  # trusted-host 此参数是为了避免麻烦,否则使用的时候可能会提示不受信任

    随后便可通过pip安装pipenv:

$ pip install --user pipenv

     --user是指为当前用户安装。

    为项目配置使用pipenv

    在安装Pipenv后,我们需要确认pipenv的位置,可以输入如下命令:

py -m site --user-site

    cmd会返回site-packages的目录,一般是 用户目录\AppData\Roaming\Python\Python39\site-packages,将其中的site-packages替换为Scripts得到的目录下,即有可执行的pipenv.exe。当然为了让Pycharm自动检测到目录,也可以直接将Scripts目录设置为PATH环境变量。

    直接通过Pycharm创建新项目,如下图,选择Python和上面得到的Pipenv excutable路径,点击Create创建

语法规则

    捡些碰到的说。

module和类、方法定义

    Python的代码写在.py扩展名的文件中,每一个.py文件就是一个module,文件名为模块名,他可以包含函数、类和变量和可执行代码。而引入module的方式也很简答,像Java一样使用import语句。我们引入的类库也是一个个模块。

    Python语言可以是面向对象的,也可以是面向过程的。在Python中可以很轻松的定义一个类,譬如:

user.py

class User:
    """一个简单的类实例"""   
    # id
    id = 0
    # 用户名
    name = ""
    # 组织编号
    orgId = 0

    类中也可以定义方法等。当我们引入此类并创建对象时,只要:

import user
auser = user.User()
auser.id = 1
auser.name = "小明"

    像上文中使用auser作为变量确实不大雅观,但是直接将变量名取为user又会有冲突,这时可以对变量起别名:

import user as usermodule
user = userusermoduleUser()
user.id = 1
user.name = "小明"

    其实之所以产生这种混淆,是因为module在实例化后(import后),其本身就是一个模块对象,用法同对象。

    方法的定义也很简单,如下展示了一个简单的md5编码的方法:

def buildToken(seed, uid):
    key = seed + str(uid)
    md5 = hashlib.md5()
    md5.update(key.encode(encoding='utf-8'))
    token = md5.hexdigest()
    return token

f-string

    在3.6版本有的新特性,可以非常方便的格式化一个字符串,算是新版本提供的一个很香的 语法糖,可以用{}来格式化一个变量或表达式。例如:

word = 'python'
print(f'hello,{word}')
#>>> hello,python
print(f'hello,{word.upper()}')
#>>> hello,PYTHON

print(f'1+2 is {1+2}')
#>>> 1+2 is 3

#也可以用于多行字符串
print(f"""one
two""")
#也可以格式化数字,在此不详细赘述
print(f'{123:05}')
#>>>00123

     想了解比较全面的可以在这篇博客了解。

异常处理

    异常处理也与Java类似,Python中大都是非检查异常。

    一个简单的异常处理:

try:
    cursor.execute(sql)
    results = cursor.fetchall()
    for row in results:
        #
except Exception as inst:
    conn.rollback()
    print(inst, "wrong")
finally:
    print("close ")
    conn.close()

获取命令参数

    若使用Python开发脚本,一般都会附加一些参数,我们可以很方便的获取命令参数数组:

main.py

import sys

print('参数个数为:', len(sys.argv), '个参数。')
print('参数列表:', str(sys.argv))

    当我们执行"py main.py arg1"时,便会输出:

>>>参数个数为: 3 个参数。
>>>参数列表: ['main.py', 'arg1', 'arg2']

注意,第一个参数为文件本身。

一些示例

文件读取和时间格式化处理(处理Nginx日志文件)

    想要统计文件,例如依赖nginx的access.log处理指定时间段内的502请求,nginx的日志大致格式如下,自左至右分别是 path 时间 状态码 ip 请求方法 参数:

/api/getUser 2021-01-08T10:38:37+08:00 200 172.201.156.21 GET id=215 
/api/login 2021-01-08T10:38:39+08:00 500 172.201.156.21 POST -

需要读取文件和做时间格式化转换:

import time
#指定开始时间,进行格式化strptime表示格式化字符串为时间 mktime表示转换为时间戳
startTime = time.mktime(time.strptime("2021-01-08 10:21:31", "%Y-%m-%d %H:%M:%S"))
for line in file:
    i=i+1
    logParams = line.split(" ")
    logTime = time.mktime(time.strptime(logParams[1], "%Y-%m-%dT%H:%M:%S+08:00"))
    if logTime > startTime and logParams[2] == "502":
        print(i, logTime)
        print(line, end='')
file.close()

数据库访问和模拟请求

    读取数据库的用户数据并模拟cookie请求系统

import pymysql
import json
import requests
#从数据库中读取指定用户的信息 传入userId
def getUser(uid):
    conn = pymysql.connect(host="localhost", user="root", passwd="123456", database="user")
    cursor = conn.cursor()
    sql = f'SELECT name,s_id FROM user WHERE id = {uid} '
    try:
        cursor.execute(sql)
        results = cursor.fetchall()
        #执行并返回的rows
        for row in results:
            fullname = row[0]
            s_id = row[1]
            # 打印结果
            print(f'查到用户:{fullname} {s_id}')
            
            #  进行md5编码生成cookie
             seed ='123456'
                        key = seed + str(orgId) + str(uid)
                        md5 = hashlib.md5()
                        md5.update(key.encode(encoding='utf-8'))
                        token = md5.hexdigest()
                        cookie = f'uid={uid}; token={token}'
                        print(f'构建cookie {cookie}')
            # 发起模拟请求
            headers = {
                            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
                            "Cookie": cookie}
                        #脱敏
                        data = {"uid":uid,"xxx":""}
                        url="xxx"
                        #打印结果
                        req = requests.post(url, data=data, headers=headers)
                        print(req.status_code)
                        response = json.loads(req.text)
                        print(response)
    except Exception as inst:
        conn.rollback()
        print(inst, "wrong")
    finally:
        print("close connect")
        conn.close()
file.close()

部署和执行

    在本地通过使用IDE可以很轻松的运行一段Python程序,甚至可以不用配置环境。但是很多情况代码都需要在远端部署和执行,需要借助一些原生命令。

使用native pip/pipres

  1. 确保python环境正常,可以执行python和pip命令,并上传.py文件

  2. 编写依赖文件requirements.txt,其实我们可以直接使用pipres依照当前目录生成:

    #安装pipres 可以根据当前项目的依赖生成以来稳健
    pip install pipres
    #进入项目目录并生成依赖文件
    pipreqs ./ --encoding=utf8
    #目录下会生成一个requirements.txt 执行install安装依赖
    pip install -r requirements.txt
  3. 执行程序,假设文件名为main.py:

    py main.py

使用pipenv

  1. 确保python环境正常,可以执行python和pip命令,并上传.py文件

  2. 编写依赖文件Pipfile,并安装pipenv,Pipfile可参考上文的格式:

    #安装pipenv 
    pip install pipenv
  3. 进入Pipfile目录,并进入目录安装依赖至虚拟环境

    pipenv install
  4. 进入pipenv项目环境并执行程序

    pipenv shell
    py main.py
评论区
评论
{{comment.creator}}
{{comment.createTime}} {{comment.index}}楼
评论

PyCharm与python快速开发

PyCharm与python快速开发

    Python语言作为“胶水语言”,简单易学,开发周期快,功能和扩展性强大,类库丰富。只依赖一门Java并不适用于所有情况,譬如快速开发一次性脚本(修复数据),通过使用Python效率更高,本篇文章旨在介绍本人快速入门Python的一些tips。注意,一些Python的基本语法在此不予介绍,推荐前往廖雪峰的博客查看,博客基于Python3.8版本。关于编译器等配置内容参考PyCharm帮助文档

环境搭建和下载安装

    从Python官网下载Python并安装,配置环境变量,安装PyCharm(这里 我们使用它作为IDE),这里略过。

依赖管理:Pip和Pipenv

    pip是python的包管理与安装工具,当你安装python后,pip也会随之被安装。Pipenv是基于Pip的依赖包管理,通过pipfile管理python程序的依赖,有点类似maven。其他还有Virtualenv,此处先不讨论。

site-packages

    简单介绍下site-packages,site-packages是python使用pip下载第三方模块的统一存档,在python代码中使用import时,site-packages的目录会成为其中一个被搜索的path。对,有点类似于maven的local仓库。

安装pipenv和配置源

    在配置过python后,确认下已经能使用pip:

$ pip --version

    pip默认的源为 https://pypi.org  ,国内会比较慢甚至超时,可以切换成阿里的镜像源 http://mirrors.aliyun.com/pypi/simple ,直接在install时添加 -i [源地址]即可,也可以创建 用户目录/pip/pip.ini并配置:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = https://mirrors.aliyun.com  # trusted-host 此参数是为了避免麻烦,否则使用的时候可能会提示不受信任

    随后便可通过pip安装pipenv:

$ pip install --user pipenv

     --user是指为当前用户安装。

    为项目配置使用pipenv

    在安装Pipenv后,我们需要确认pipenv的位置,可以输入如下命令:

py -m site --user-site

    cmd会返回site-packages的目录,一般是 用户目录\AppData\Roaming\Python\Python39\site-packages,将其中的site-packages替换为Scripts得到的目录下,即有可执行的pipenv.exe。当然为了让Pycharm自动检测到目录,也可以直接将Scripts目录设置为PATH环境变量。

    直接通过Pycharm创建新项目,如下图,选择Python和上面得到的Pipenv excutable路径,点击Create创建

语法规则

    捡些碰到的说。

module和类、方法定义

    Python的代码写在.py扩展名的文件中,每一个.py文件就是一个module,文件名为模块名,他可以包含函数、类和变量和可执行代码。而引入module的方式也很简答,像Java一样使用import语句。我们引入的类库也是一个个模块。

    Python语言可以是面向对象的,也可以是面向过程的。在Python中可以很轻松的定义一个类,譬如:

user.py

class User:
    """一个简单的类实例"""   
    # id
    id = 0
    # 用户名
    name = ""
    # 组织编号
    orgId = 0

    类中也可以定义方法等。当我们引入此类并创建对象时,只要:

import user
auser = user.User()
auser.id = 1
auser.name = "小明"

    像上文中使用auser作为变量确实不大雅观,但是直接将变量名取为user又会有冲突,这时可以对变量起别名:

import user as usermodule
user = userusermoduleUser()
user.id = 1
user.name = "小明"

    其实之所以产生这种混淆,是因为module在实例化后(import后),其本身就是一个模块对象,用法同对象。

    方法的定义也很简单,如下展示了一个简单的md5编码的方法:

def buildToken(seed, uid):
    key = seed + str(uid)
    md5 = hashlib.md5()
    md5.update(key.encode(encoding='utf-8'))
    token = md5.hexdigest()
    return token

f-string

    在3.6版本有的新特性,可以非常方便的格式化一个字符串,算是新版本提供的一个很香的 语法糖,可以用{}来格式化一个变量或表达式。例如:

word = 'python'
print(f'hello,{word}')
#>>> hello,python
print(f'hello,{word.upper()}')
#>>> hello,PYTHON

print(f'1+2 is {1+2}')
#>>> 1+2 is 3

#也可以用于多行字符串
print(f"""one
two""")
#也可以格式化数字,在此不详细赘述
print(f'{123:05}')
#>>>00123

     想了解比较全面的可以在这篇博客了解。

异常处理

    异常处理也与Java类似,Python中大都是非检查异常。

    一个简单的异常处理:

try:
    cursor.execute(sql)
    results = cursor.fetchall()
    for row in results:
        #
except Exception as inst:
    conn.rollback()
    print(inst, "wrong")
finally:
    print("close ")
    conn.close()

获取命令参数

    若使用Python开发脚本,一般都会附加一些参数,我们可以很方便的获取命令参数数组:

main.py

import sys

print('参数个数为:', len(sys.argv), '个参数。')
print('参数列表:', str(sys.argv))

    当我们执行"py main.py arg1"时,便会输出:

>>>参数个数为: 3 个参数。
>>>参数列表: ['main.py', 'arg1', 'arg2']

注意,第一个参数为文件本身。

一些示例

文件读取和时间格式化处理(处理Nginx日志文件)

    想要统计文件,例如依赖nginx的access.log处理指定时间段内的502请求,nginx的日志大致格式如下,自左至右分别是 path 时间 状态码 ip 请求方法 参数:

/api/getUser 2021-01-08T10:38:37+08:00 200 172.201.156.21 GET id=215 
/api/login 2021-01-08T10:38:39+08:00 500 172.201.156.21 POST -

需要读取文件和做时间格式化转换:

import time
#指定开始时间,进行格式化strptime表示格式化字符串为时间 mktime表示转换为时间戳
startTime = time.mktime(time.strptime("2021-01-08 10:21:31", "%Y-%m-%d %H:%M:%S"))
for line in file:
    i=i+1
    logParams = line.split(" ")
    logTime = time.mktime(time.strptime(logParams[1], "%Y-%m-%dT%H:%M:%S+08:00"))
    if logTime > startTime and logParams[2] == "502":
        print(i, logTime)
        print(line, end='')
file.close()

数据库访问和模拟请求

    读取数据库的用户数据并模拟cookie请求系统

import pymysql
import json
import requests
#从数据库中读取指定用户的信息 传入userId
def getUser(uid):
    conn = pymysql.connect(host="localhost", user="root", passwd="123456", database="user")
    cursor = conn.cursor()
    sql = f'SELECT name,s_id FROM user WHERE id = {uid} '
    try:
        cursor.execute(sql)
        results = cursor.fetchall()
        #执行并返回的rows
        for row in results:
            fullname = row[0]
            s_id = row[1]
            # 打印结果
            print(f'查到用户:{fullname} {s_id}')
            
            #  进行md5编码生成cookie
             seed ='123456'
                        key = seed + str(orgId) + str(uid)
                        md5 = hashlib.md5()
                        md5.update(key.encode(encoding='utf-8'))
                        token = md5.hexdigest()
                        cookie = f'uid={uid}; token={token}'
                        print(f'构建cookie {cookie}')
            # 发起模拟请求
            headers = {
                            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
                            "Cookie": cookie}
                        #脱敏
                        data = {"uid":uid,"xxx":""}
                        url="xxx"
                        #打印结果
                        req = requests.post(url, data=data, headers=headers)
                        print(req.status_code)
                        response = json.loads(req.text)
                        print(response)
    except Exception as inst:
        conn.rollback()
        print(inst, "wrong")
    finally:
        print("close connect")
        conn.close()
file.close()

部署和执行

    在本地通过使用IDE可以很轻松的运行一段Python程序,甚至可以不用配置环境。但是很多情况代码都需要在远端部署和执行,需要借助一些原生命令。

使用native pip/pipres

  1. 确保python环境正常,可以执行python和pip命令,并上传.py文件

  2. 编写依赖文件requirements.txt,其实我们可以直接使用pipres依照当前目录生成:

    #安装pipres 可以根据当前项目的依赖生成以来稳健
    pip install pipres
    #进入项目目录并生成依赖文件
    pipreqs ./ --encoding=utf8
    #目录下会生成一个requirements.txt 执行install安装依赖
    pip install -r requirements.txt
  3. 执行程序,假设文件名为main.py:

    py main.py

使用pipenv

  1. 确保python环境正常,可以执行python和pip命令,并上传.py文件

  2. 编写依赖文件Pipfile,并安装pipenv,Pipfile可参考上文的格式:

    #安装pipenv 
    pip install pipenv
  3. 进入Pipfile目录,并进入目录安装依赖至虚拟环境

    pipenv install
  4. 进入pipenv项目环境并执行程序

    pipenv shell
    py main.py

PyCharm与python快速开发2021-01-16鱼鱼

{{commentTitle}}

评论   ctrl+Enter 发送评论