Python文件的读取与写入
主要包括“.txt”、“.csv”和".json"格式。文件的读写与open
函数有着密切的关系,open
函数引用方式为:
open('绝对路径',‘mode’,'buffering').
mode:包括:"r"-->读模式;‘w’-->写模式;‘a’-->追加模式;
‘b’-->二进制模式(可与其他混合);‘+’-->读/写模式(可混合使用)。
“buffering”:控制文件的缓冲,“0”-->>>无缓冲,直接将数据写在硬盘上;
‘1’-->>>有缓冲,数据先写到内存里,只有使用flush或close函数才会将数据更新到硬盘上;
‘buffering_arg>1’-->>>代表缓冲的大小(单位是字节)
‘负数’-->>>代表使用默认缓冲区的大小
针对文件读取的IO异常,一般使用try...finally
实现。
try:
f=open("绝对路径",‘r’)
print(f.read())
finally:
if f:
f.close()
=============================================================
1. TXT文件的读写
- TXT的读取:
readline():可以读取一行内容
readlines():读取全部内容,返回的形式为列表
- 读取较大文件时的用法
with open("路径",‘r’) as f:
for line in f.readlines():
print(line.strip())
- 文件的写入
write():可以读取一行内容(一个字符串)
writelines():写入一个序列(readlines的反向操作)
2. CSV文件的读/写
读和写都是按照行进行的,假如有三列,
#列名['a','b','c']
#按照列表输入
rows=[(1,2,3),(4,5,6),(7,8,9)]
#按照字典输入
Rows=Rows=[dict(a=1,b=2,c=3),dict(a=2,b=3,c=4),dict(a=3,b=4,c=6)]
CSV文件的写入(案例)
- 按照列表的形式写入
import csv
headers=['a','b','c']#列标题
rows=[(行)(行)....]#元素为元组
with open("路径",‘w’) as f:
f_csv=csv.writer(f)
f_csv.writerow(headers)
f_csv.writerows(rows)
- 按照字典的形式写入
Rows=[{行},{行}....]#元素为字典
with open("路径",‘w’) as f:
f_csv=csv.DictWriter(f,headers)
f_csv.writeheader()
f_csv.wrierows(Rows)
由于python2和Python3的区别,会使得保存的.csv
文件会出现空行现象,解决方法,有两种:
1)--->>> with open("路径",‘w’,newline="") as f:
2)-->>> f_csv=csv.writer(f,dialect="unix")#换行符为“\n”
CSV文件的读取
with open('路径',‘r’) as f:
f_csv=csv.reader(f)
headers=next(f_csv)
for row in f_csv:
print row
3. JSON的读写
Json是一种轻量级的数据交换格式,容易编写和阅读。
JSon对象:JavaScripts中的对象“{}”
和数组"[]"
.
Json对象和Python对象之间的转换关系:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number(int) | int,long |
number(real) | float |
true/false | True/False |
null(“空”) | None |
用法: |
import json
json.loads() #将json对象转化为Python对象
json.dumps()#反向操作
注:json.loads的输入必须是“utf-8”编码
如果不是先解码再编码,如:
T=dataJsonStr.decode('GB2312')
dataDict=json.loads(T,encoding='GB2312')
- UTF与GBK之间的转换
先将UTF转换为unicode,再将unicode转换为GBK,反之亦然,Unicode是桥梁(基础)。
#读取json文件
json.load(open('liststr.json'))
#将字符串转化为JSon对象,并写入`open("listStr.json",'w'),`中,默认为`ascii`编码
json.dump(listStr,open("listStr.json",'w'),ensure_ascii=Fasle)
或者重新编码
T=json.dump(listStr,open("listStr.json",'w'),ensure_ascii=Fasle)
T.encode('utf-8')
参考:
Python CSV Reader/Writer/DictReader/DictWriter例子
Python2/Python3通过writerow写入csv文件会有多余的空行 及 bytes和str互相转换