@[TOC]Python常用模块小整理
#.py脚本所在项目路径
projectpath = os.path.dirname(os.path.abspath(file))
print(projectpath )
#连接目录与文件名或目录
os.path.join(path,name):
①随机小数 :随机获取0-20之间的小数,并保留n位数
#coding=utf-8
import random
#生成随机数,浮点类型
a = random.uniform(0, 20)
#控制随机数的精度round(数值,精度)
n=3
print round(a, n)
②随机整数
import random
print(random.randint(0,20)) #随机一个大于等于0且小于等于20的整数
print(random.randrange(1,10)) #从指定范围内,按指定基数递增的集合中 获取一个随机数
n = 1
m = 6
print(random.randrange(n,20,m))
#n=奇数,就以6递增奇数,随机选取一个实数;n=偶数同理
③从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型,list, tuple, 字符串都属于sequence
import random
print(random.choice("Python")) #随机返回Python中任意一个字母
print(random.choice(["JaingCaiYong", "is", "a", "handsome", "boy"])) #随机返回参数列表中任意一个元素
print(random.choice(("Tuple", "List", "Dict")))
④从列表中随机获取n个元素
import random
# random.sample(sequence, k)
#从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
res = random.sample(list, 5) # 从list中随机获取5个元素,作为一个片断返回
print(res)
⑤打乱列表顺序
import random
list = [1,2,3,a,b,c]
random.shuffle(list)
print(list)
⑥号码生成器
import random
def random_num(m):
code = ''
for i in range(m):
ran1 = random.randint(0, 9)
ran2 = chr(random.randint(65, 90)) #chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符
add = random.choice([ran1,ran2])
code = ''.join([code, str(add)])
return code
rand = random_num(m=6) #m为要生成的几位数
print(rand)
ip1目录下的文件拷贝到ip2对应的目录下
import os
import re
import shutil
import time
from datetime import date, timedelta
exportfile ='\\\\ip1\\d$\\yswt'
targetpath ='\\\\ip2\\d$\\GtjaFile\\dysrzrq\\jzjy\\%s' % (date.today() + timedelta(days=-1)).strftime("%Y%m%d")
#% (date.today() + timedelta(days=-1)).strftime("%Y%m%d") -1表示天数,获取前一交易日的文件,如果想找后n天的,同理days = -n
if not os.path.isdir(targetpath):
os.makedirs(targetpath)
else:
pass
file_list = os.listdir(exportfile) # 获取文件夹下所有的文件
fileall = []
for file in file_list:
if re.findall('.*%s.*'%time.strftime("%Y%m%d"), file): # 判断文件是否是今天日期的
fileall.append(file)
srcFilename = exportfile + '\\' + file # 找到指定目录下的文件
shutil.copy(srcFilename, targetpath)
copyCommand = 'xcopy %s %s /s /e /c /y /h /r' % (srcFilename, targetpath) # 拷贝文件到指定目录并覆盖
if os.system(copyCommand) == 0: # 执行该copy命令
print('拷贝当天文件%s个完成' % len(fileall))
logging函数根据它们用来跟踪的事件的级别或严重程度来命名。标准级别及其适用性描述如下(以严重程度递增排序):
级别 | 何时使用 |
---|---|
DEBUG | 详细信息,一般只在调试问题时使用 |
INFO | 证明事情按预期工作 |
WARNING | 某些没有预料到的事件的提示,或者在将来可能会出现的问题提示。例如:磁盘空间不足。但是软件还是会照常运行 |
ERROR | 由于更严重的问题,软件已不能执行一些功能了 |
CRITICAL | 严重错误,表明软件已不能继续运行了 |
级别 | 数字值 |
---|---|
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
默认等级是WARNING,这意味着仅仅这个等级及以上的才会反馈信息,除非logging模块被用来做其它事情。
一、输出日志到控制台
其中方法setLevel可以设置日志对应的等级,按照等级打印到控制台
import logging
#第1步:创建日志器对象
#创建日志对象(记录器),默认是warning等级日志
logger = logging.getLogger()
#第2步:创建控制台处理器
console_handler = logging.StreamHandler()
#定义控制台的等级
console_handler.setLevel(level='DEBUG')
#第1步控制器中添加控制台处理器
log.addHandler(console_handler)
logging.debug("这日志是debug级别")
logging.info("这日志是info级别")
logging.warning("这日志是warning级别")
logging.error("这日志是error级别")
logging.critical("这日志是critical级别")
二、输出日志到指定文件夹
import logging
#创建日志对象(记录器)
log = logging.getLogger()
#创建文本处理器。filename是日志输出路径,mode文件权限a添加,encoding文件格式
file_handler = logging.FileHandler(filename='d:/log.txt',mode='a',encoding='utf-8')
#定义文本的等级
file_handler.setLevel(level='ERROR')
#第1步控制器中添加控制台处理器
log.addHandler(file_handler)
logging.debug("这日志是debug级别")
logging.info("这日志是info级别")
logging.warning("这日志是warning级别")
logging.error("这日志是error级别")
logging.critical("这日志是critical级别")
日志封装:
import logging
class log(object):
def __init__(self, level="DEBUG"): # 日志处理器
self.log = logging.getLogger("日志")
self.log.setLevel(level)
def get_formatter(self): #格式器,定义输出的是控制台,还是文本格式
console_fmt = logging.Formatter(fmt="%(name)s--->%(levelname)s--->%(asctime)s--->%(message)s")
file_fmt = logging.Formatter(fmt="%(lineno)d--->%(asctime)s---->%(levelname)s--->%(message)s")
return console_fmt, file_fmt
def console_handle(self, level="DEBUG"): #控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(level)
#处理器添加格式
console_handler.setFormatter(self.get_formatter()[0])
return console_handler
def file_handle(self,log_path, level="DEBUG"): #文本处理器
file_handler = logging.FileHandler(filename=log_path, mode="a", encoding="utf-8")
file_handler.setLevel(level)
# 处理器添加格式器
file_handler.setFormatter(self.get_formatter()[1])
return file_handler
def get_log(self,log_path): #log_path 日志输出的路径地址 如d:/log.txt
self.log.addHandler(self.console_handle()) # 日志器添加控制台处理器
self.log.addHandler(self.file_handle(log_path)) # 日志器添加文件处理器
return self.log
if __name__ == '__main__':
pass
关于Formatter的讲解
Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息
%(name)s | Logger的名字 |
---|---|
%(levelno)s | 数字形式的日志级别 |
%(levelname)s | 文本形式的日志级别 |
%(pathname)s | 调用日志输出函数的模块的完整路径名,可能没有 |
%(filename)s | 调用日志输出函数的模块的文件名 |
%(module)s | |
%(funcName)s | 调用日志输出函数的函数名 |
%(lineno)d | 调用日志输出函数的语句所在的代码行 |
%(created)f | 当前时间,用UNIX标准的表示时间的浮 点数表示 |
%(relativeCreated)d | 输出日志信息时的,自Logger创建以 来的毫秒数 |
%(asctime)s | 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 |
%(thread)d | 线程ID,可能没有 |
%(threadName)s | 线程名,可能没有 |
%(process)d | 进程ID,可能没有 |
%(message)s | 用户输出的消息 |
此模块读取csv后缀结尾的文件,并进行相关操作
open(filename)打开csv文件
readlines读取csv文件所有行,并以列表形式返回。列表中的每一个元素就是csv文件中的一行。
len取得列表长度
total = len(open(filename).readlines())
import pandas as pd
import csv
class CsvFile:
def PdWriteCsv(self,writepath): #使用pandas写入csv
a = ['第一列行1','第一列行2']
b = ['第二列行1','第二列行2']
dataframe = pd.DataFrame({'列1': a ,'列2': b}) #字典中的key值即为csv中列名
dataframe.to_csv(writepath,index=False,sep=',') #将DataFrame存储为csv,index表示是否显示行名,default=True
def ListWriteCsv(self,writepath): #列表写入csv
csvFile = open(writepath, 'w', newline='') # 设置newline,否则两行之间会空一行
writer = csv.writer(csvFile)
writer.writerow(["a_name", "b_name"]) # 先写入columns_name列名
writer.writerows([[1, 2], [2, 3]]) # 写入多行用writerows
def DictWriteCsv(self,writepath): # 从字典写入csv文件
dic = {'one': 1, 'two': 2, 'three': 3}
csvFile = open(writepath, 'w', newline='')
writer = csv.writer(csvFile)
for key in dic:
writer.writerow([key,dic[key]])
def ReadCsv(self,writepath): # 以字典读取csv文件
csvFile = open(writepath, "r")
dict_reader = csv.DictReader(csvFile)
for row in dict_reader:
print(row,row['a_name'])
if __name__ == '__main__':
pass
# CsvFile().ListWriteCsv(writepath=r"D:\write.csv")
# CsvFile().ReadCsv(writepath=r"D:\write.csv")