一、对文件操作
open()
这是python中内置的打开和创建文件的函数。
第一个参数是文件的路径,第二个参数是模式,默认是 “r”,表示读模式。
“w” 表示写模式
“a” 表示追加模式
“b” 模式表示这是二进制文件(如图片、.exe文件等),通常和读、写模式一起使用,如 “rb” ,“wb”
① 写模式
该模式下,都会把文件清空然后再写。
python">f=open('contacts.txt','w',encoding='utf-8')
f.write('小王 13977188888 \n')
f.write('小玛 15632333333 \n')
f.close()
输出:
② 读模式
输出:
③ 追加模式
④ b模式
如复制一张图片这样写:
结果:
如果不想每次都手动f.close(),可以使用with关键字,如下:
二、异常处理
捕捉异常,用固定搭配:
python">try:#有可能发生异常的代码写这里
except Exception: # Exception是所有异常的基类,可以写具体的类如文件不存在写FileNotFoundError。如解码错误写UnicodeDecodeError。# 发生异常后要执行的代码写这里
finally:# 无论发不发生异常都要执行的代码写这里
finally里面的代码是try里面的代码无论发不发生异常都会被执行。
如果有可能会发生多个异常可以写多个except,如下图:
还支持把异常打印出来:
三、CSV文件处理
1、csv文件概念
csv文件其实就是文本文件。
csv文件中,每一列用逗号隔开,每一行用换行符隔开。如在pycharm中打开csv文件如下图:
如果在excel中打开上面这个csv文件,如下图:
2、打开csv文件
① 用open()函数打开csv文件
f.readlines()
这个函数作用是把文件里边的每一行读到一个列表里边。
输出:
如果一个单元格里边包含一个逗号,则需要用引号引起来:
在excel打开,效果是这样的:
② 用csv模块打开csv文件(常用)
现在有example1.csv文件:
读:
第一种读,使用 csv.reader() 这个阅读器:
python">import csvwith open('./data_files/example1.csv',"r",encoding='utf-8') as f:reader=csv.reader(f)for row in reader:for col in row:print(col,end="\t")print()
输出:
第二种读,使用 csv.DictReader() 这个阅读器:
python">with open('./data_files/example1.csv',"r",encoding='utf-8') as f:reader=csv.DictReader(f)for row in reader:print(row['订单号'],row['销售额'])
输出:
写:
现在有sales数组:
python">sales = (("Peter", (78, 70, 65)),("John", (88, 80, 85)),("Tony", (90, 99, 95)),("Henry", (80, 70, 55)),("Mike", (95, 90, 95)),
)
第一种写,用 csv.writer() 这个笔:
python">with open('./data_files/example2.csv','w',newline='') as f: #使用 newline='' 可以确保 csv.writer 统一处理换行符,避免每行之间出现两个换行符的问题。writer=csv.writer(f)writer.writerow(['name','Jan','Feb','Mar'])for name,grades in sales:# writer.writerow([name,grades[0],grades[1],grades[2]])# 或者用*号去解压列表writer.writerow([name,*grades])
结果新建了一个example2.csv文件,里面的内容是:
第二种写,用 csv.DictWriter() 这个笔:
先把sales转成含有字典的列表:
python">data=[{'name':name,'Jan':grades[0],'Feb':grades[1],'Mar':grades[2]} for name,grades in sales]
import pprint
pprint.pprint(data) # pprint.pprint(data) 美化输出data
输出:
然后把这个列表写进 example3.csv
python">with open('./data_files/example3.csv','w',newline="") as f:fieldnames=['name','Jan','Feb','Mar']writer=csv.DictWriter(f,fieldnames)writer.writeheader()for row in data:writer.writerow(row)
最后 example3.csv 里面的内容是: