- 文件
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"))