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互相转换

posted @ 2020-04-03 17:59  LgRun  阅读(171)  评论(0编辑  收藏  举报