1、字符串转换为日期
dt_date = datetime.datetime.strptime(ymd, "%Y%m%d")
2、日期转换为字符串
date = dt_date.strftime("%Y-%m-%d")
3、昨天
(datetime.datetime.strptime(date, "%Y%m%d") - datetime.timedelta(1)).strftime("%Y%m%d")
4、argparse
命令行选项、参数和子命令解析器
5、sys模块
提供了一系列有关Python运行环境的变量和函数
- sys.argv:实现从程序外部向程序传递参数,可以用sys.argv获取当前正在执行的命令行参数的参数列表(list)。
- sys.path:返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
6、overwrite
dataframe写入的一种模式,dataframe写入的模式一共有4种
def mode(saveMode: String): DataFrameWriter = { this.mode = saveMode.toLowerCase match { case "overwrite" => SaveMode.Overwrite // 覆盖已经存在的文件 case "append" => SaveMode.Append // 向存在的文件追加 case "ignore" => SaveMode.Ignore // 如果文件已存在,则忽略保存操作 case "error" | "default" => SaveMode.ErrorIfExists // 如果文件存在,则报错 case _ => throw new IllegalArgumentException(s"Unknown save mode: $saveMode. " + "Accepted modes are 'overwrite', 'append', 'ignore', 'error'.") } this }
7、eval
用来执行一个字符串表达式,并返回表达式的值
eval(expression[, globals[, locals]])
参数
- expression – 表达式。
- globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
还可以进行字符串与list、tuple、dict的转化
8、json.dumps()和json.loads()
json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)
- json.dumps():Python 字典类型转换为 JSON 对象
- json.loads():将 JSON 对象转换为 Python 字典
9、os.system(cmd)
使用os.system(cmd)即可在python中使用linux命令
10、if __name__ == ‘__main__’:的作用
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == ‘main’: 的作用就是控制这两种情况执行代码的过程,在 if __name__ == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。
11、zfill
返回指定长度的字符串,原字符串右对齐,前面填充0
12、如果不够两位,前位补0
# 如果不够两位,前位补0 conf = "qzk" date = "20220606" h = 6 h1 = 16 s1 = f"{conf}/{date}/{h:0>2d}" s2 = f"{conf}/{date}/{h1:0>2d}" print(s1) print(s2) # 输出 qzk/20220606/06 qzk/20220606/16
13、Python 直接赋值、浅拷贝和深度拷贝解析
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
字典浅/深拷贝实例
>>> a = {1: [1,2,3]} >>> b = a.copy() >>> a, b ({1: [1, 2, 3]}, {1: [1, 2, 3]}) >>> a[1].append(4) >>> a, b ({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]}) >>> import copy >>> c = copy.deepcopy(a) >>> a, c ({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]}) >>> a[1].append(5) >>> a, c ({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})
解析
1、b = a: 赋值引用,a 和 b 都指向同一个对象。 2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。 3、b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
14、endswith()
作用:判断字符串是否以指定字符或子字符串结尾,常用于判断文件类型
相关函数:判断字符串开头 startswith()
函数说明语法:
string.endswith(str, beg=[0,end=len(string)]) string[beg:end].endswith(str)
参数说明:
- string: 被检测的字符串
- str: 指定的字符或者子字符串(可以使用元组,会逐一匹配)
- beg: 设置字符串检测的起始位置(可选,从左数起)
- end: 设置字符串检测的结束位置(可选,从左数起)
如果存在参数 beg 和 end,则在指定范围内检查,否则在整个字符串中检查
返回值:
如果检测到字符串,则返回True,否则返回False。
解析:如果字符串string是以str结束,则返回True,否则返回False
注:会认为空字符为真
15、with open() as file和open()参数详解
with open() as file:
是 Python 中用于打开文件的语法结构。
with
和as
是 Python 的关键字,用于创建一个上下文环境,确保在离开该环境时资源能够被正确关闭或释放。open()
是一个内置函数,用于打开文件并返回一个文件对象。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
open()
函数的各个参数的详细解释:
file
:要打开的文件名(或文件路径)。可以是相对路径或绝对路径。mode
(可选):打开文件的模式。它是一个字符串参数,默认值为'r'
(只读模式)。常用的打开模式包括:
'r'
:只读模式。文件从开头位置开始读取,默认模式。'w'
:写入模式。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件进行写入。'x'
:独占创建模式。只写模式,用于创建新文件。如果文件已存在,则抛出FileExistsError
异常。'a'
:追加模式。文件从末尾位置开始写入,如果文件不存在,则创建新文件。'b'
:二进制模式。以二进制形式读取或写入文件,用于处理非文本文件。't'
:文本模式(默认)。以文本形式读取或写入文件,用于处理文本文件。
buffering
(可选):指定文件的缓冲策略。可以为整数值来指定缓冲区大小,或者使用-1
(默认值)来选择默认的缓冲机制。encoding
(可选):指定文件的编码格式。例如,'utf-8'
、'latin-1'
等。如果不指定该参数,在文本模式下将使用系统默认编码。errors
(可选):指定编解码错误的处理方式。默认值为None
,表示使用默认的错误处理机制。newline
(可选):指定用于文本模式下换行符的转换方式。可以是None
(默认值,保持系统默认),''
(不进行转换),'\n'
(将换行符转换为\n
),'\r'
(将换行符转换为\r
)等。closefd
(可选):定义当文件对象关闭时是否关闭与文件描述符相关的底层文件。默认值为True
,表示关闭文件。opener
(可选):用于自定义打开文件的底层实现的函数。
读写
# 1. 打开⽂件 f:file文件的缩写 f = open('test.txt', 'w') # 2.⽂件写⼊ f.write('hello world') # 3. 关闭⽂件 f.close()
- writelines():写入的必须是列表类型。
- readlines():可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
- readline():一次读取一行内容。
16、logging
日志的等级
日志级别 | 使用场景 |
DEBUG | 用于调试阶段,输出详细的调试信息,通常不会在生产环境中使用 |
INFO | 用于输出程序运行的一般信息,例如程序启动、停止等 |
WARNING | 用于输出警告信息,例如程序运行时出现了一些不严重的问题,但需要引起注意 |
ERROR | 用于输出错误信息,例如程序运行时出现了一些严重的问题,需要及时处理 |
CRITICAL | 用于输出严重的错误信息,例如程序崩溃、系统崩溃等,需要立即处理 |
logging.basicConfig(*kwargs)
参数名称 | 描述 |
filename | 指定日志输出目标文件的文件名,指定该参数后日志信息就不会输出到控制台上 |
filemode | 指定日志文件的打开模式,默认为’a’.需要注意的是,该选项要在filename被指定时才有效 |
format | 指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序 |
datefmt | 指定日志记录中日期和时间的格式,该选项要在format中包含时间字段%(asctime)s时才有效 |
level | 指定日志器的日志级别,小于该级别将不会输出 |
stream | 指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常 |
style | 指定format格式字符串的风格,可取值为’%‘、’{‘和’$‘,默认为’%’ |
format
字段/属性名称 | 使用格式 | 描述 |
asctime | %(asctime)s | 日志事件发生的事时间 |
levelname | %(levelname)s | 该日志记录的文字形式的日志级别(‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’) |
message | %(message)s | 日志记录的文本内容,通过 msg % args计算得到的 |
pathname | %(pathname)s | 调用日志记录函数的源码文件的全路径 |
filename | %(filename)s | pathname的文件名部分,包含文件后缀 |
module | %(module)s | filename的名称部分,不包含后缀 |
lineno | %(lineno)d | 调用日志记录函数的源代码所在的行号 |
funcName | %(funcName)s | 调用日志记录函数的函数名 |
import logging # 1、创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) # 2、创建一个handler,用于写入日志文件 fh = logging.FileHandler('test.log') fh.setLevel(logging.DEBUG) # 再创建一个handler,用于输出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # 3、定义handler的输出格式(formatter) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 4、给handler添加formatter fh.setFormatter(formatter) ch.setFormatter(formatter) # 5、给logger添加handler logger.addHandler(fh) logger.addHandler(ch)
17、os、shutil、glob
os
shutil
glob
查找指定的文件
想查找的文件名已知道,但目录在哪里不知道
# coding:utf-8 import glob path = glob.os.path.join(glob.os.getcwd(), '*') # 获取当前路径下所有内容 # 判断每个内容的类型(文件夹还是文件) # 递归 final_result = [] def search(path, target): result = glob.glob(path) for data in result: if glob.os.path.isdir(data): _path = glob.os.path.join(data, '*') search(_path, target) else: if target in data: final_result.append(data) return final_result # /home/test1.py if test1 in /test1/abc.py if __name__ == '__main__': result = search(path, target='test1') print(result)
查找含有指定文件的内容
文件中包含某些关键字,但不知道文件名和所在路径
# coding:utf-8 import glob path = glob.os.path.join(glob.os.getcwd(), '*') # 获取当前路径下所有内容 # 判断每个内容的类型(文件夹还是文件) # 递归 final_result = [] def search(path, target): result = glob.glob(path) for data in result: if glob.os.path.isdir(data): _path = glob.os.path.join(data, '*') print('path is %s' % _path) search(_path, target) else: f = open(data, 'r') try: content = f.read() if target in content: final_result.append(data) except: print('data read failed: %s' % data) continue finally: f.close() return final_result if __name__ == '__main__': result = search(path, target='dewei') print(result)
批量修改目录中的文件名称
知道文件名需要修改的字符串
# coding:utf-8 import glob import shutil def update_name(path): result = glob.glob(path) for index, data in enumerate(result): if glob.os.path.isdir(data): _path = glob.os.path.join(data, '*') update_name(_path) else: path_list = glob.os.path.split(data) # [/home/xxxx, name.txt] name = path_list[-1] new_name = '%s_%s' % (index, name) # '0_name.txt' new_data = glob.os.path.join(path_list[0], new_name) shutil.move(data, new_data) if __name__ == '__main__': path = glob.os.path.join(glob.os.getcwd(), '*') update_name(path)