re.time.random.json.pickle模块的简单操作

Posted on 2018-08-29 17:07  晶夜style  阅读(155)  评论(0)    收藏  举报

re模块

findall(正则表达式,字符串) 

s = 'hghg659.,jh3565'
ret = re.findall('\d+', s)
print(ret)
返回一个匹配后的列表

search(正则表达式,字符串)

s = 'hghg659.,jh3565'
ret = re.search('\d+', s)
if ret:
    print(ret.group())
else:
    print(ret)
匹配到的值需要用group()方法取值

match(正则表达式,字符串)

s = '654woheni521今天七夕'
ret = re.match('\w+', s)
print(ret.group())
匹字符串开始的位置

split(正则表达式,字符串)

s = '今天七夕521你过得好吗525,其实不好对吧222'
ret = re.split('\d{3},?', s)
print(ret)
使用正则切割字符串,返回一个列表

sub(正则表达式,替换的新的内容,字符串,替换次数)

s = '今天七夕521你过得好吗525,其实不好对吧222'
ret = re.sub('\d{3},?', '666', s, 2)
print(ret)

compile(正则表达式)

ret = re.compile('\d{3},?')
result = ret.findall(s)
print(result)
result = ret.search(s)
print(result.group())
这个是先编译好一个正则,然后后续匹配直接使用
比较节省时间

filter(正则表达式,字符串)

ret = re.finditer('\d{3},?', s)
print(list(el.group() for el in ret))
filter()返回的是一个迭代器
他比较节省空间

 括号的优先级和使用

s = 'hehe65hh'
ret = re.findall('\w(\d+)\w',s)
print(ret)
# 本来我们想要的是'e65h',但是由于()的优先级导致我们的结果是'65'

#想要取消()优先级
s = 'hehe65hh'
ret = re.findall('\w(?:\d+)\w',s)
print(ret)

#()的使用
s = 'hehe65hh'
ret = re.search('\w(?P<name>\d+)\w',s)
print(ret.group('name'))
#可以通过命名来获取到值

注意:在search()方法中是不存在括号优先级的,但如果你用的是()来命名取值的则是取到()里的值

random模块

random()方法:

r = random.random() #获取0-1之间的随机小数
print(r)  

randint()方法:

r = random.randint(a,b) #获取a-b之间的随机整数,顾头顾尾
print(r)

uniform()方法:

r = random.uniform(a,b) #获取a-b之间的随机小数,顾头顾尾
print(r)

randrange()方法:

r = random.randrange(a,b) #获取a-b之间的随机整数,顾头不顾尾
print(r)

sample()方法:

lst = [2,6,9,45]
r = random.sample(lst,2) #从lst中随机取出两个组成一个新列表
print(r) #[6, 9]

shuffle()方法

li = [1, 2, (2, 3), 'haha']
print(random.shuffle(li)) #随机打乱这个列表序列

choice()方法

li = [1, 2, (2, 3), 'haha']
print(random.choice(li))  #从列表中随机选择一个

time模块

time模块是用来表示时间的模块

time模块一般是有三种时间形式:

  1. 时间戳时间>>>>就是从某一个时间开始已知道此时的时间秒数
  2. 结构化时间
  3. 格式化时间(字符串格式)

time()方法:获取当前时间的时间戳

localtime(时间戳)方法:把传入的时间戳转换成结构化时间

strptime()方法;将结构化时间转成格式化时间

strftime()方法:将格式化时间转成结构化时间

mktime()方法:将结构化时间转成时间戳

t = time.time() #获取当前时间时间戳
print(t)  #1535375940.3338828

t1 = time.localtime(t) # 将时间戳转成结构化时间
print(t1)  #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=27, tm_hour=21, tm_min=26, tm_sec=46, tm_wday=0, tm_yday=239, tm_isdst=0)

t2 = time.strftime('%Y-%m-%d %H:%M:%S',t1) #将结构化时间转成格式化时间
print(t2) #2018-08-27 21:31:37

t3 = time.strptime('2018-08-27 21:31:37','%Y-%m-%d %H:%M:%S') #将字符串时间转成结构化时间
print(t3) #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=27, tm_hour=21, tm_min=31, tm_sec=37, tm_wday=0, tm_yday=239, tm_isdst=-1)

t4 = time.mktime(t3)  # 将结构化时间转成时间戳
print(t4) #1535376697.0

 图示:

 

json模块

 json模块一般是用来把写入文件的转义成可以写入文件的格式,然后取出来,json模块是支持不同语言之间的传读文件的

dic = {'name': '', 'age': '21'}
with open('json', mode='a', encoding='utf-8') as f:
    ret = json.dumps(dic)
    f.write(ret+"\n")
# 将字典转化字符串写入

with open('json', mode='r', encoding='utf-8') as f1:
    print(json.loads(f1.read()))
# 将文件的字符串转换成字典读出

# 但要注意dumps和loads方法只支持单个的读存
with open('json', 'r') as f1:
    for line in f1:
        print(json.loads(line.strip())['name']) #读取的时候是可以遍历文件一行一行取的

# 存的时候只能多次执行存操作来完成存多行
dic = {'name': '', 'age': '21'}
with open('json', mode='a', encoding='utf-8') as f:
    ret = json.dumps(dic)
    f.write(ret+'\n')
    ret = json.dumps(dic)
    f.write(ret+'\n')
    ret = json.dumps(dic)
    f.write(ret+'\n')

pickle模块

pickle模块是来完成将要存入文件的格式转换成bytes格式的,取的时候在转回来,只支持python之间的传递

# 序列化之后写入文件
dic = {'name': '', 'age': '21'}
with open('pickle', mode='ab') as f:
    a = pickle.dumps(dic)   # 序列化
    f.write(a) 

# 反序列化读出
with open('pickle', mode='rb') as f1:
    print(pickle.load(f1))    # 反序列化取出

因为序列化之后是bytes格式,所以读取要用wb,rb等模式

# 如果文件有多条,持续读出
with open('pickle', mode='rb') as f1:
    while 1:
        try:
            print(pickle.load(f1))
        except EOFError:   # 抛出异常
            break

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3