python基础学习笔记(三) 文件、time和正则表达式

  • 文件
f=open(file_name,open_way)
# "r","w"
#"a"  如果文件存在写入到文件末尾,否则新建文件

"r"

f.read(2)      #read 2 Byte
f.readline()
f.readlines()  #read all lines in a list

"w","a"

f.write("1k is real\r\n")  #windows

关闭文件

f.close()
  • context manager
print(f.closed)                  #if file is closed
with open(file_name,"w") as f:
   f.write("1k is real")
print(f.closed)                  #true  在with as 结构执行完毕会自动关闭文件

是因为在进入文件时使用 __enter__( ),退出时使用__exit__( )

自定义:

class Say(object):
    def __init__(self,text):
        self.text=text
    def __enter__(self):
        self.text=self.text+"nanana"
        return self
    def __exit__(self,exc_type,exc_value,traceback):
        self.text=self.text+"!"

with Say("my name") as sayout:
    print(sayout.text)
    #my name nanana
print(sayout.text)
    #my name nanana!
  • 对象的存储  Pickle 包

第一步:将对象转化为有序的文本,即序列化

第二步:将文本存入文件

import pickle

class bird(object):
    feather=True
    reproduction="egg"

summer        = bird()
pickle_string = pickle.dumps(summer)      #序列化,注意是dumps

with open("summer.pkl","wb") as f:
    f.write(pickle_string)                #保存

或直接

with open("summer.pkl","wb") as f:
   pickle.dump(summer,f)                  #序列化并保存,注意是dump

读取时,若非内置类的对象,需要将类说明一遍再读取:

import pickle

class bird(object):
    feather=True
    reproduction="egg"

with open("summer.pkl","rb") as f:
    summer=pickle.load(f)
print(summer.feather)
  • time包
import time

print(time.time())

start=time.clock()
for i in range(20):
    print(i)   
end=time.clock()

print("runtime:",end-start)

#time 包含struct_time对象
#该对象中将挂钟时间转化为年,月,日,时,分,秒等属性如tm_year,te_month,tm_mday
st=time.gmtime()       #UTC格式的时间
print(st)
st=time.localtime()
print(st.tm_year)
t= time.mktime(st)     #转换为挂钟时间
  • datetime包
import datetime

t=datetime.datetime(2018,3,21,1)
print(t)                                       #2018-03-21 01:00:00

t1=datetime.datetime(2018,3,21,1)
t2=datetime.datetime(2018,3,22,1)

delta1=datetime.timedelta(seconds=30)
delta2=datetime.timedelta(weeks=3)

print(t1+delta1)                               #2018-03-21 01:00:30
print(t2+delta2)                               #2018-04-12 01:00:00
print(t2-t1)                                   #1 day, 0:00:00
print(t2>t1)                                   #True

将带有时间信息的字符串转化为datetime的对象

from datetime import datetime          #对象time

str    ="output-2018-3-22-030000.txt"
format ="output-%Y-%m-%d-%H%M%S.txt"
t      =datetime.strptime(str,format)
print(t)

format = "%Y-%m-%d %H:%M"
t      = datetime(2018,3,22,20,10)
print(t.strftime(format)) 

#%A Sunday,Monday..
#%a Sun,Mon..
#%I 12-hour
#%p AM/PM
#%f millseconds
#%Y year
#%m month
#%d day
#%H 24-hour
#%M minute
#%S second
  • 正则表达式
impor re
#从第二个字符串找到数字返回对象m
m = re.search("[0-9]","abcd4e5")
print(m.group())       #4,找到有符合的就可以

m = re.match("[0-9]","3456")
print(m.group())       #3,从头开始,必须第一个就符合

m = re.match("[0-9]","abcd3f")
print(m.group())       #nonetype 
string="hah lo goo gle"
lis=re.split(" ",string)
print(lis)

string="abc bcs abc sss"
lis=re.findall("abc",string)
print(lis)
.      #任意字符
a|b    #字符a或b
[afg]  #a或f或g
[0-4]  #0,1..4
[a-f]  #a,b...f
[^m]   #不是m的一个字符
\s     #一个空格
\S     #一个非空格
\d     #一个数字
\D     #一个非数字
\w     #数字或字母
\W     #非数字非字母
更多的正规表达式参见编译原理

进一步的提取

import re

m = re.search("output_(\d{4})","in_output_1997_12_11_abcd")
print(m.group(0))      #output_1997
print(m.group(1))      #1997

为group命名

m = re.search("output_(?P<year>\d{4})","in_output_1997_09_07_abcd")
print(m.group(0))
print(m.group("year"))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值