python基本使用

🐍 前言

python具有简单、易学、免费、高扩展性等优势在处理IO密集型程序具有得天独厚的优势。python广泛应用于科学计算、人工智能、Web开发,桌面应用等等。其在有numpy、pandas、scipy、sklearn等库的加持下,在数据分析领域里占有重要席位。python属于动态编程语言,其灵活性非常高。我最喜欢他的交互式编程,通过jupyter工具,在数据分析领域里简直是神器一般的存在。

本文不是python教程,对数据类型、语法结构、程序结构等这些基础的知识没有涉及(可以看菜鸟教程学习一下基础知识)。本文介绍了python编写代码时经常用到的,比如文件IO操作、JSON处理、时间转换、日志处理等等。

python官方文档

python的国内镜像(下载快)

🐍pip使用

pip是下载安装python脚本所依赖的库的便捷工具。
在终端中运行
基础使用
还是用阿里云镜像下载快

pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ 

导入requirement.text
一般python项目依赖很多依赖库,要是一个一个导入,很难受,但是有一个requirement.text那就会一键自动下载安装

pip install -r requirements.txt

🐍虚拟环境(virtualenv)

1、安装

pip install virtualenv

2、创建

virtualenv myenv //会在当前运行目录下创建myenv文件夹,里面是运行环境。

3、激活虚拟环境

linux:

source myenv/bin/activate

windows:

cd myenv/Scripts
activate

4、退出虚拟环境

deactivate

🐍开始使用

请在此句后写运行代码。

if __name__ == '__main__':

🐍基础方法

# 打印输出
print()
# 查看变量类型
typeof()
# 查看对象的属性、方法
dir()

🐍类型转换

# 字符串和int转换
str(int) # int转字符串
int(str) # 数字字符串转int

# 列表和字符串转换
''.join(list) # list=[1,2,3],转换之后为“123”。引号之间可以加分隔符,','.join(list),结果为“1,2,3”
list(str) # 返回列表
str.split() # 也是转列表的一种方法,括号里添加分隔符。

🐍 Http请求

http请求主要用到的库为requests库

1、get请求

import requests as rq
resp=rq.get(host+path,headers=headers)
print(resp.text)

🐍 时间处理

在这里插入图片描述

1、获取当前时间

import time
import datetime

now_time = time.time() # 获取时间戳
# 格式化时间
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now_time ))  # 时间戳转日期 '2014-01-08 11:59:58'

2、 判断现在时间是否在当天一段时间内

# 范围时间 : 9:00-18:00
from_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '9:00', '%Y-%m-%d%H:%M')
to_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '18:00', '%Y-%m-%d%H:%M')

# 当前时间
now_time = datetime.datetime.now()

# 判断当前时间是否在范围时间内
if now_time > from_time and now_time < to_time:
    print(True)
else:
    print(False)

3、打印程序运行时间

import time

time_start=time.time()
# 此处写程序
time_end=time.time()
print('程序共花费:',time_end-time_start)

🐍json处理

json字符串转json对象

json.loads()

列表,字典转json对象

json.dumps()

以下是json类型与python数据类型转换对应表(图源自菜鸟教程-python3-json
在这里插入图片描述


🐍列表(list)操作

# my_list是列表
 len(my_list) # 获取列表长度
 my_list.append("value") # 在列表末尾插入值
 my_list.insert(1,"value") # 在索引号1的位置插入value,原来的数据会向后移
 my_list.pop(i) # 删除指定位置的value。i为索引值;若参数为空,则删除最后一个数据

list遍历:

# 最简单方法
for i in range(len(my_list)):
	print(f'索引:{i},值:{my_list[i]}')
# 方法2,这种方法只会返回值,没有索引
for value in my_list:
	print(value )
# 方法3,更高级方法
for i,value in enumerate(my_list):
    print(i,value)

🐍字典(dict)操作

dict={}
dict["key"]="value" # 字典赋值可以直接赋值。

字典遍历:

# 方法1
for key in dict: # 只有“键”,想要值还得由key索引
	  print(key+':'+dict[key])
# 方法2
for value in dict.values(): # 只有“值”
	print(value)
# 方法3
for key,value in dict.items(): #即返回key也返回value
    print(key+':'+value)

🐍字符串(str)操作

字符串的索引切片不作介绍,下面列出字符串常用方法

方法返回值解释
capitalize()str将字符串的第一个字符转为大写
center(width, fillchar)str返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
find(str, beg=0, end=len(string))bool检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
lower()str转换字符串中所有大写字符为小写
upper()str小写转大写
replace(old, new [, max])str把 字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。
split(str=“”, num=string.count(str))str以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
stripstr去除两边空格,用lstrip去除左,rstrip()去除右

🐍 目录与文件操作

1、目录操作

# 改变当前工作目录
os.chdir(path)

# 返回当前工作目录
os.getcwd() # 等同于os.path.abspath("./")

# 返回path指定的文件夹包含的文件或文件夹的名字的列表。
os.listdir(path)

# 返回path指定的文件夹下的文件目录遍历器,以三元元组的形式返回,(root,dirs,files)
os.walk(path,[...])  # 与listdir不同,它返回的是生成器不是列表;它分开了文件和文件夹,而且可以设置相关参数来返回子目录的文件,更加方便。
# os.walk返回元组,元组第二个位置为所有目录,第三个位置是所有文件
next(os.walk(path))

# 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
os.mkdir(path[, mode])

# 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。	
os.remove(path)

# 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
os.rmdir(path)

# 递归删除目录。
os.removedirs(path)

2、路径

os.path.exists() # 判断文件或文件夹是否存在
os.path.isfile()
os.path.isdir()
os.path.abspath(path)	#返回绝对路径
os.path.dirname(path)	#返回文件路径
os.path.exists(path)	#如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。

3、File操作

open(file, mode='r') #  打开文件
file.close() # 关闭文件
file.read([size])  # 从文件读取指定的字节数,如果未给定或为负则读取所有。
file.readline([size])  # 读取整行,包括 "\n" 字符。
file.write(str)  # 将字符串写入文件,返回的是写入的字符长度。
file.writelines(sequence)  # 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

🐍类与对象

定义类

class myclass(object):
	def __init__(self, param1, param2):
        self.param1 = param1
        self.param2 = param2

如果不知道继承哪个类,就继承object类(所有的类的老祖都是object)
其中__init__是类的构造函数,第一个参数必须是self.

类的变量默认是public,如果想private,需要在变量前加双下划线:__


🐍*,/,*args,**kwds

python是一个动态编程语言,定义一个函数时,可以对参数设定默认值;而且传参时候可以通过键值赋值使不按顺序传参。可以通过*,/来对参数键值赋值传参方式做出限制。

输入/,表示/的参数只能通过位置传参,不能通过键值传参。

def my_func(arg1,/,arg2="默认"):
    print("打印1:",arg1)
    print("打印2:",arg2)

# 正确使用:
my_func("参数1",arg2="参数2") # my_func("参数1","参数2") 也是正确的

# 错误使用,会抛异常
# my_func(arg1="参数1",arg2="参数2")

输入*,表示*面的参数只能通过键值传参,不能通过位置传参。

def my_func(arg1,*,arg2="默认"):
    print("打印1:",arg1)
    print("打印2:",arg2)

# 正确使用:
my_func("参数1",arg2="参数2") # my_func(arg1="参数1",arg2="参数2") 也是正确的

# 错误使用,会抛异常
# my_func("参数1","参数2")

输入*args,表示传入的位置参数可以是多个,在函数内部调用args,会返回一个元组
args名称可以更改,使用arg习惯罢了。

def my_func(*arg):
    print("打印1:",arg)

my_func("参数1","参数2")
# 打印1: ('参数1', '参数2')

输入**kwds,表示传入的键值参数可以是多个,在函数内部调用kwds,会返回一个字典
kwds名称也可以更改。

def my_func(*arg,**kwds):
    print("打印1:",arg)
    print("打印2:",kwds)

my_func("参数1",arg1="参数2")
# 输出
'''
打印1: ('参数1',)
打印2: {'arg1': '参数2'}
'''

🐍 python操作数据库

python操作mysql和sqlite数据库请看我另一篇blog:

python操作数据库


🐍 hashlib库使用

通常情况下,hashlib模块支持md5(),sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(),blake2s(),sha3_224(), sha3_256(), sha3_384(), sha3_512(), shake_128(), shake_256()等多种hash构造方法。

常用方法:
hashlib.algorithms_available() # 查看电脑支持的哈希算法
hash.update() # 用类似字节的对象更新哈希对象。
hash.digest() # 返回到目前为止传递给该方法的数据的摘要,这是一个字节对象。
hash.hexdigest() # 返回十六进制数字摘要。

import hashlib
m = hashlib.sha256() # 想用md5()方法的话,把sha256()换掉就行
m.update(b"hello world")
print(m.digest())# 以字节形式返回
# b"\xb9M'\xb9\x93M>\x08\xa5.R\xd7\xda}\xab\xfa\xc4\x84\xef\xe3zS\x80\xee\x90\x88\xf7\xac\xe2\xef\xcd\xe9"

print(m.hexdigest()) # 以16进制返回
# b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

简洁语句:

>>> hashlib.sha256(b"hello world").hexdigest()

🐍进程休眠

import time

time.sleep() # 参数填数字,单位为秒


🐍异常处理

try:
    # 可能引发异常的语句
except Exception as error:
    print(error)
    # 如果出错会触发的语句
else:
    # 如果不出错会触发的语句
finally:
    print('这句话,无论异常是否发生都会执行。')

except和else内的语句一定会触发一个。
python异常的继承关系

抛出异常

raise Exception('异常: {}'.format(x))

如果raise后面不加参数,会原样抛出


🐍 logging

程序运行时,良好的日志习惯有助于程序的排错。python有个logging库是很好的日志处理库

import logging

日志有五个等级,等级大小排序如下:

debug < info < warning < error < critical

使用logging.basicConfig(level=logging.NOTSET) 来设置日志级别,默认级别是WARNING,info、debug显示不出来

logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  # logging.basicConfig函数对日志的输出格式及方式做相关配置
logger = logging.getLogger()
# 由于日志基本配置中级别设置为DEBUG,所以打印信息将会全部显示在控制台上
logger.info('this is a loggging info message')
logger.debug('this is a loggging debug message')
logger.warning('this is loggging a warning message')
logger.error('this is an loggging error message')
logger.critical('this is a loggging critical message')

输出格式说明:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息

1、日志输出到文件

logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  # logging.basicConfig函数对日志的输出格式及方式做相关配置
logger = logging.getLogger()
handler = logging.FileHandler("log.txt")
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info('this is a loggging info message')

2、日志追踪traceback

使用logger.exception(msg,_args)

try:
	#代码块
except Exception:
	logger.exception("出错了;")
	# 等价于:logger.error("出错了;",exc_info = True)

🐍生成requirements.txt

1、导出全部环境的依赖包

pip freeze > requirements.txt

2、导出当前环境依赖的包

需要安装第三方库

# 安装
python3 -m pip install pipreqs
# 在当前目录生成
pipreqs . --encoding=utf8 # 注意后面有一点,可以加上  --force  ,覆盖已存在的文件

🐍 生成exe可执行文件

pyinstaller打包工具

安装

pip install pyinstaller

pyinstall常用参数

参数解释
-i可执行文件的图标
-n名字
-D生成一个目录,这个与-F命令相反
-F生成可执行程序(单独一个文件,不是目录了)
-w取消控制台显示(默认是显示控制台的)
-c控制台显示(默认)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值