日期和时间
time和datetime是Python处理日期和时间的标准库。
时间间隔是以秒为单位的浮点小数。
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
time模块
time()函数获取当前时间戳,函数time.time()用于获取当前时间戳:
import time
#显示从1970年1月1日以来的事件,单位为秒
print(time.time())
localtime([seconds])格式化时间戳为本地时间,返回时间元组
import time
print(time.localtime(time.time()))
time.strftime(format[, time_tuple])格式化日期函数
# 格式化成2018-04-14 21:46:50形式
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 格式化成Sat Apr 14 21:46:50 2018形式
print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
time.strptime(string, format)将日期时间字符转换为时间元组
import time
struct_time = time.strptime("21-Nov-08", "%d-%m-%Y")
print("Time Tuple:",struct_time)
struct_time = time.strptime("2015-03-05","%Y-%m-%d")
print("Time Tuple:",struct_time)
time.mktime(time_tuple)将时间元组转换成时间戳
# 将格式字符串转换为时间戳
a = "Sat Apr 14 21:46:50 2018"
print (time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))
time.sleep(seconds)程序睡眠等待几秒钟
#sleep(秒)程序睡眠时间
start_time = time.time()
time.sleep(5)
end_time = time.time()
print(end_time - start_time)
很多Python函数用一个元组装起来的9组数字处理时间
序号 | 属性 | 字段 | 值 |
---|---|---|---|
0 | tm_year | 4位数年 | 例如:2008 |
1 | tm_mon | 月 | 1-12 |
2 | tm_mday | 日 | 1-31 |
3 | tm_hour | 小时 | 0-23 |
4 | tm_min | 分钟 | 0-59 |
5 | tm_sec | 秒 | 0-61 (60或61是闰秒) |
6 | tm_wday | 一周的第几日 | 0到6(0都是周一) |
7 | tm_yday | 一年的第几日 | 1-366(儒略历) |
8 | tm_isdst | 夏令时 | -1,0,1,-1未知,1(夏令时)、0(不是夏令时) |
datetime模块
使用datetime模块来获取当前的日期和时间
datetime.datetime.now()获取当前日期和时间
import datetime
print("datetime=", datetime.datetime.now())
strftime(format)日期时间格式化
#strftime(format)可以格式化时间
print("datetime=", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
datetime.datetime.fromtimestamp(timestamp)将时间戳转换为日期时间
import time
import datetime
ts = time.time()
#将当前时间戳转换为日期时间格式
c_t = datetime.datetime.fromtimestamp(ts)
print("Current Time=", c_t)
datetime.timedelta(时间间隔)返回一个时间间隔对象,通过时间间隔可以对时间进行加减法得到新的时间
import datetime
#取今天的日期和时间
today = datetime.datetime.today()
print("today={}".format(today.strftime("%Y-%m-%d %H:%M:%S")))
#计算一天前时间间隔
timedelta = datetime.timedelta(days=1)
#今天的日期时间-timedelta,得到昨天的日期时间
yesterday = today - timedelta
print("yesterday={}".format(yesterday.strftime("%Y-%m-%d %H:%M:%S")))
时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。
文件操作
文件操作最重要的就是文件读写,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
读文件
open(文件路径,访问模式,endcoding=编码格式)方法打开一个已存在的文件,或者创建新的文件
fp.open('test.txt','r',encoding='utf-8')
close()方法关闭已打开的文件
打开文件常用的三种访问模式
r:只读模式(默认)
w:只写模式
a:追加模式
write(data)方法向文件中写入字符串,在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。 write()方法语法如下:
fileObject.write([str])
read()方法读取文件全部内容
readlines()方法读取文件全部内容,放回一个列表,每行数据是列表中的一个元素
readline()方法按行读取文件数据
writelines(字符串序列)将一个字符串序列(如字符串列表等)的元素写入到文件中
os.rename(oldname, newname)文件重命名
os.remvoe(filepath)删除文件
安全的打开关闭文件的方式(自动调用close方法):
with open("d://test.txt","w") as f:
f.write("hello python")
import sys
import json
result_file='/tmp/user_json.txt'
for i in range(len(sys.argv)):
print(sys.argv[i])
if len(sys.argv)<2:
print("Not Enough Parameters!")
sys.exit(1)
#将第一个参数做为文件路径传入fp函数,以只读方式打开。FP所指的文件是一个JSON格式的文件
try:
fp=open(sys.argv[1],'r')
except OSError as reason:
print('str(Exception):\t', str(reason))
print("Read File Error")
try:
fp_dump=open(result_file,'w')
except:
print("Create File for Modification Error")
i = 0
#读入fp所指的文件
line = fp.readline()
#line不为空则继续循环
while line:
i += 1
#将一行内容读入,转成Python的字典类型数据,便于处理
data = json.loads(line)
print("line{:<5d}:{}".format(i,data))
print("No{:d=},cardName={}".format(i,data["cardName"]))
fp_dump.write("i={},data={}\n".format(i,data['driverName']))
#读入fp所指的文件,每次循环读一行
line = fp.readline()
fp.close()
fp_dump.close()
文件夹操作
os.mkdir(path)创建文件夹
os.getcwd()获取程序运行的当前目录
os.listdir(path)获取指定目录下的文件列表
os.rmdir(path)删除空文件夹
shutil.rmtree(path)删除非空文件夹
os.chdir(path)切换目录
import os
#创建目录
os.mkdir("/tmp/python")
#将制定目录下内容导入到一个列表中
list=os.listdir("/tmp")
print("list={}".format(list))
#显示当前目录
print("current_directory={}".format(os.getcwd()))
#删除目录
os.rmdir("/tmp/python")
#将tmp目录中的文件user_json.txt改名为example.txt
os.rename("/tmp/user_json.txt","/tmp/example.txt")
#显示目录删除后的结果
list=os.listdir("/tmp")
print("list after python direcotry being removed: {}".format(list))
#删除example.txt文件
os.remove('/tmp/example.txt')
JSON格式文件操作
json模块主要用于对json格式进行处理,最主要的是dumps、dump、loads和load函数。
dump和dumps用于把pyhton数据转换为json字符串,dumps只能操作数据,dump可以在处理数据之后,同时写入文件。
load和loads用于把json数据转换为python数据,loads可以把一个json字符串转为python数据,load则可以把一个json文件中的数据读出来进行转换。
引入json模块:import json
dumps(python_data)将Python数据转换为JSON编码的字符串
loads(json_data) 将json编码的字符串转换为python的数据结构
dump(python_data, file)将Python数据转换为JSON编码的字符串并写入文件
load(json_file)从JSON数据文件中读取数据,并将json编码的字符串转换为python的数据结构
import json
#定义一个python数据字典
data={"orgNo":"E000002","dirverPhone":"13800138000","driverName":"李四","cardName":"张三","cardFaceURL":"http://file.example.com:5077/group1/M00/04/70/abcdfssass.jpg","authdt":"2017-04-12"}
#打印字典
print(type(data))
#将字典转换为json字符串
ad = json.dumps(data)
print("ad={}".format(ad))
#打印字符串类型
print(type(ad))
#将Python字符串转换为字典数据
al = json.loads(ad)
#打印字典数据以及类型
print("al={}".format(al))
print(type(al))
Python数据类型与JSON类型对比
Python | JSON |
---|---|
dict | {} |
list,tuple | [] |
str | string |
int,float | number |
True,False | true,false |
None | null |
CSV格式文件操作
csv格式文件默认以逗号分隔的若干字段文本的形式,有标题行 使用前,需要首先import进csv模块:import csv
writerow([row_data])一次写入一行数据
import csv
with open("文件名","打开方式"):
writer = writer.writerow(f)
for item_list in list:
writer.writerow(item_list)
writerows([row_data],[row_data],[row_data],...)一次写入多行数fi据
import csv
csv_list=[["UserName","Password","Name","Age","Score"],["User1","123456","Smith",18,102],["User2","654321","Chandler",20,110],["User3","000000","Rachel",19,115]]
csv_tuple=(("UserName","Password","Name","Age","Score"),("User1","123456","Smith",18,102),("User2","654321","Chandler",20,110),("User3","000000","Rachel",19,115))
csv_dict={"username":"user1","name":"zhangsan","age":18,"score":{"Maths":"100","Cinese":"100"}}
#用writerow方法,循环写入
with open('/tmp/csv.txt','w',newline="",encoding="utf-8") as f:
writer = csv.writer(f)
for row in csv_list:
writer.writerow(row)
#用writerows方法,无需循环,直接一次性写入,每个列表占一行
with open('/tmp/csv_1.txt','w',newline="",encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerows(csv_list)
#如果是一个列表元组,则同样可以用writerows一次性写入;如果用writerow方法,则会把这个元组的所有元素写入一行,不符合要求
with open('/tmp/csv_2.txt','w',newline="",encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerows(csv_tuple)
#如果是字典,则字典的每个键的所有字符打开,用逗号分隔,单独占一行;而值舍去
with open('/tmp/csv_3.txt','w',newline="",encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerows(csv_dict)
reader(file_object)根据打开的文件对象返回一个可迭代reader对象
with open('/tmp/csv.txt','r') as f:
#定义一个reader实例
reader = csv.reader(f)
#读入一行,并把reader的指针移动到下一行
header = next(reader)
print(header)
print("-----------")
#将当前指针位置以后的reader对象逐行独处并打印
for row in reader:
print(row)
print(row[0])
print(row[1])
print(row[2])
print(row[3])
print(row[4])
可以使用next(reader)遍历reader对象,获取每一行数据
DictWriter和DicReader对象处理Python字典类型的数据,针对字典类型的数据,reader和writer不能处理,为此,csv中专门引入了DictWriter和DictReader方法对python类型数据进行处理:
header = ["name","age"]
rows = [{"name":"zhangsan","age":20},{"name":"lisi","age":30},{"name":"wangwu","age":18}]
with open("d://user_info_csv_dict.csv","w",newline="",encoding="utf-8") as f:
writer = csv.DictWriter(f,header)
writer.writeheader()
writer.writerows(rows)
with open("d://user_info_csv_dict.csv","r",newline="",encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
print("name:{},age:{}".format(row["name"],row["age"]))