import time
time.time() # 1529653382.830719
# time.struct_time(tm_year=2018, tm_mon=5, tm_mday=16, tm_hour=10, tm_min=21, tm_sec=2, tm_wday=2, tm_yday=136, tm_isdst=0)
time.localtime()
# 把时间(time.struct_time)转换成指定格式的字符串
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # '2018-06-22 15:49:59'
# 把时间戳转换为指定格式字符串
time.strftime('%Y%m%d%H%M%S', time.localtime(1529653382.830719))
import datetime
# 把 “指定格式的时间字符串” 转换为“datetime对象”
dt_str = '2018-02-09 07:19:50'
dt_obj = datetime.datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S")
dt_obj # datetime.datetime(2018, 2, 9, 7, 19, 50)
# 把“datetime对象” 转换为 “指定格式的时间字符串”
dt_obj.strftime("%Y%m%d%H%M%S") # '20180209071950'
# 把“指定格式的时间字符串” 转换为 “时间戳对象”
dt_obj = datetime.datetime.strptime(s , "%Y-%m-%d %H:%M:%S")
time.mktime(dt_obj.timetuple()) # 1518131990.0
# 把“指定格式的时间字符串” 转换为 “时间戳对象”
time.mktime(time.strptime(s,'%Y-%m-%d %H:%M:%S')) # 1518131990.0
data = '7c900030000001780000000030303035'
bytes().fromhex(data)
b'|\x90\x000\x00\x00\x01x\x00\x00\x00\x000005'
def bytes_to_hex_str(bytes_data):
if bytes_data:
return ''.join(['%02x' % b for b in bytes_data])
else:
return ''
hex(ord(b'K')) # 0x4b K是ascii中可见字符,所以编辑器在碰到0x4b的时候就把0x4b转换成了b'K'
import binascii
data = b'\\\x00?\x00?\x00\\\x00E\x00:\x00'
print(binascii.hexlify(data)) # b'5c003f003f005c0045003a00'
unpack反序列化:字节转换成常用数据类型
data = '7c90000B00001818000000003235303630303035'
import struct
struct.unpack('>H', bytes.fromhex(data)[2:4])[0]==0x0B #True
pack序列化:常用数据类型转换成字节
s = struct.Struct('III')
s.pack(12,15,16) #b'\x0c\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00'
os.sep 表示 '\\'反斜杠
r''里面的内容表示不转义,使用真实字符串
filepath = r'C:\Users\daacheng\Desktop\bl_dev\imsiimei_whcs_bh_yyzkdw_dzwl_20180510103417_120.bcp'
file_name = os.path.split(filepath)[1] #文件名 imsiimei_whcs_bh_yyzkdw_dzwl_20180510103417_120.bcp
file_ext = os.path.splitext(filepath)[1] #文件后缀 .bcp
# 文件或文件夹重命名
os.rename(src, dst)
# 查看文件大小
os.path.getsize(file_path)
# 运行操作系统cmd命令(从一个命令打开一个管道),例如:
os.popen('jupyter notebook')
pr = os.popen('wc -l test.txt')
# 可以查看返回的执行结果 15 test.py
pr.read()
# 获取文件的最后修改时间
os.stat(file_path).st_mtime
import tempfile
import os
tmpfd, tmp_file_path = tempfile.mkstemp()
print(tmpfd) #文件描述符
print(tmp_file_path) #临时文件的绝对路径
os.close(tmpfd) #关闭文件
# 防止占用资源
tempfile.mktemp() #mktemp用于返回一个临时文件的路径,但并不创建该临时文件。
import xml.dom.minidom as Dom
# 创建XML文档
doc = Dom.Document()
# 创建根节点
root = doc.createElement('html')
# 创建h1节点
h1 = doc.createElement('h1')
h1.setAttribute('name','aaaa')
h1.setAttribute('value','hhhhh')
h1.appendChild(doc.createTextNode('hello world'))
doc.appendChild(root)
# 把h1节点作为root的子节点进行添加
root.appendChild(h1)
f = open("test2.xml", "w",encoding='utf-8')
doc.writexml(f, addindent='\t', newl='\n', encoding="utf-8")
f.close()
<?xml version="1.0" encoding="utf-8"?>
<html>
<h1 name="aaaa" value="hhhhh">hello world</h1>
</html>
如果文件已utf-8BOM开头,肉眼发现不了,但是对文件转换会造成影响,需要处理
with open(dev_filepath, 'r+b') as f:
data = f.read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
f.seek(0)
f.truncate()
f.write(data)
import getopt
import sys
print(sys.argv[1:]) # ['-h', '-t', 'bb', '-i', 'cc']
opts, args = getopt.getopt(sys.argv[1:], 'i:o:e:c:f:t:h', ['check','output='])
print(opts)
print(args)
# getopt中需要三个参数
# 1、使用sys.argv[1:]过滤掉第一个参数(执行的脚本的名字,这个不需要)
# 2、短格式分析串:'i:o:e:c:fh' 分别代表 -i -o -e -c -f 命令。后面有":"表示需要带参数。
# 3、长格式分析串列表: ['check','output='] 表示 "help"命令 和 "output"命令,"="表示需要带参数。
# 函数返回两个列表 opts, args
# args为不属于格式信息的剩余的命令行参数,即不是按照getopt()里面定义的长或短选项字符和附加参数以外的信息。
# 例如: 运行命令 python .\test.py -h -t bb -i cc
# opts = [('-h', ''), ('-t', 'bb'), ('-i', 'cc')]
# args = []
'a456'.isdigit() # False
import re
'-'.join(re.findall(r'.{2}', 'F0B42998CE34')) # 'F0-B4-29-98-CE-34'
for i in range(1,10):
print('')
for j in range(1,i+1):
print('%d*%d=%d ' % (i,j,i*j),end="")
[mysql]
host = 172.16.2.207
port = 3306
db = WWW
user = EEE
passwd = 123445
[csv]
print_num = 100000
import configparser
# 配置文件由节(sections)、键(key)、值(value)组成
config = configparser.ConfigParser()
config.read("all_export_conf", encoding='utf-8')
# 获取配置文件所有的节sections ['mysql', 'csv']
config.sections()
# 获取某个节中的所有键 ['host', 'port', 'db', 'user', 'passwd']
config.options('mysql')
# 获取某个节中的某个键对应的value '172.16.2.207'
config.get('mysql','host')
config.get('mysql','port')
# 添加一个配置文件节点
config.add_section('test')
# 给节点添加键值对
config.set('test','name','daacheng')
import difflib
str1 = '广东省揭东县登岗镇洋滇村东磨区西门楼九号'
str2 = '广东省揭东甚登岗镇洋滇村东膺区西闫楼九号'
seq = difflib.SequenceMatcher(None, str1,str2)
ratio = seq.ratio()
print('相似度: ', ratio)
a=set('abcdefghijk')
a.remove('a')
a # {'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'}
a=set('abcdefghijk')
a.discard('m')
a # {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'}
# 给定两个参数,返回两个参数的“商”和“余数”
divmod(7,2) # (3, 1)
divmod(10,5) # (2, 0)
import socket
import struct
x = 1234
# socket.ntohl() 把(32bit)正整数从网络序转换成主机字节序
socket.ntohl(x) # 3523477504
# socket.ntohs() 把(16bit)正整数从网络序转换成主机字节序
socket.ntohs(x) # 53764
# socket.htonl(x) 把(32bit)正整数从主机字节序转换成网络序
socket.htonl(3523477504) # 1234
# socket.htons(x) 把(16bit)正整数从主机字节序转换成网络序
socket.htons(53764) # 1234
# 字符串IPv4转换为 长度为4的字节串(32bit)
socket.inet_aton('192.168.1.11') # b'\xc0\xa8\x01\x0b'
# 长度为4的字节串(32bit)转换为 字符串IPv4
socket.inet_ntoa(b'\xc0\xa8\x01\x0b') # '192.168.1.11'
# 把标准字符串形式的IP 转换成 网络字节序(大端) 整型表示的IP
struct.unpack(">I", socket.inet_aton('192.168.1.11'))[0] # 3232235787
# 把网络字节序 整型表示的IP 转换成标准字符串形式的IP
socket.inet_ntoa(struct.pack('I', socket.htonl(3232235787))) # '192.168.1.11'
from watchdog.observers import Observer
from watchdog.events import *
import time
class FileEventHandler(FileSystemEventHandler):
def __init__(self):
FileSystemEventHandler.__init__(self)
def on_moved(self, event):
if event.is_directory:
print("directory moved from {0} to {1}".format(event.src_path,event.dest_path))
else:
print("file moved from {0} to {1}".format(event.src_path,event.dest_path))
def on_created(self, event):
if event.is_directory:
print("directory created:{0}".format(event.src_path))
else:
print("file created:{0}".format(event.src_path))
def on_deleted(self, event):
if event.is_directory:
print("directory deleted:{0}".format(event.src_path))
else:
print("file deleted:{0}".format(event.src_path))
def on_modified(self, event):
if event.is_directory:
print("directory modified:{0}".format(event.src_path))
else:
print("file modified:{0}".format(event.src_path))
if __name__ == "__main__":
observer = Observer()
event_handler = FileEventHandler()
observer.schedule(event_handler, r"C:\Users\Liye\Desktop\ttt", True)
observer.start()
# try:
# while True:
# time.sleep(1)
# except KeyboardInterrupt:
# observer.stop()
observer.join()
print('end...')
利用正则表达式校验一个字符串是否是合法的车牌
import re
s1 = "浙AD12345*"
s2 = "鄂A8P8F8D"
s3 = ""
s4 = "鄂A-8P8F8"
regex = '^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][-]{0,1}[DF]?[A-Z0-9]{4}[A-Z0-9挂学警港澳领][DF]?$'
print(re.match(regex,s1))
print(re.match(regex,s2))
print(re.match(regex,s3))
print(re.match(regex,s4))
答案:D
python3 -m venv virtual-environment-name
-
-m venv 选项的作用是以独立的脚本运行标准库中的 venv 包,后面的参数为虚拟环境的名称。
# 创建 python3 -m venv venv # 激活 source venv/bin/activate # 退出 deactivate