格式:open( 文件名,模式,encoding=‘utf8’,buffering=-1 ) encoding->编码
buffering->缓存,默认-1
本人也是初学者,在Python官网上看到的相关的文档,说的不好还请谅解,指出。
文件及其组合模式
值 | 描述 |
---|---|
‘r’ | 只读模式 |
‘rb’ | 只读模式(针对二进制文件) |
‘w’ | 只写模式(会覆盖掉已经有的内容) |
‘wb’ | 只写模式(针对二进制文件,覆盖已有内容) |
‘a’ | 追加模式(向已有的内容后面进行追加) |
‘b’ | 二进制模式 |
‘t’ | 文本模式 |
‘+’ | 读写模式,构成r+,w+,a+ |
‘U’ | 通用匹配换行符模式 |
缓冲(buffering),默认为-1
值 | 描述 |
---|---|
0或False | 无缓冲,读写操作直接针对磁盘 |
1或True | 有缓冲,只有使用flush或者close时才会写入磁盘 |
任意负数 | 表示默认缓冲区大小 |
读和写
方法名 | 描述 |
---|---|
read([size]) | 以字符串形式返回数据,可选参数size可以指定读取的字节数,如果未指定表示返回全部数据 |
write(str) | 将字符串写入文件 |
readline() | 以当前位置,从文件中读取一行,以字符串返回这行数据,offset指向下一行起始位置 |
readlines([size]) | 将文件返回行为列表(list类型),可选参数size用于指定返回的行数;如果size未指定,表示返回所有行数 |
writelines() | 将一个字符串列表一次性写入到文件中,不会加换行符 |
关闭、清空缓冲
方法名 | 描述 |
---|---|
close() | 关闭文件流 |
flush() | 强制写入磁盘,并清空缓冲区 |
举些例子:
'''
格式:open( 文件名,模式,encoding='utf8',buffering=-1 ) encoding->编码
buffering->缓存,默认-1
返回值:file_object 的文件对象,它是一个可 iterable 的对象 ,所以可以直接循环
'''
'''
1.写入内容到 'context.txt' 文本
'''
try:
fo=open( 'context.txt','w',encoding='utf8' ) # 'w'模式会覆盖原文本,这里如果使用'w+'或者'a+'模式可以进行追加写入的内容
texts=input('请输入您需要写入的内容:')
fo.write( texts+'\n' ) #写入方法, '\n'自动换行(可以不写)
except:
print("读取异常")
finally:
fo.flush() # 强制写入磁盘,并清空缓冲区
fo.close() #关闭文件流
'''
2.读取 'context.txt' 文本中的内容
'''
try:
fo=open( 'context.txt','r+',encoding='utf8' )
lines=fo.readlines() #读取所有内容,返回的的是所有行的内容合起来的list类型
for line in lines: #循环每行
print( line ) #逐行输出
except:
print("读取异常")
finally:
fo.close()
'''
文件流操作也是可以通过 with 关键字来执行的,而且使用with关键字不用手动关闭流,
以及手动捕捉异常,因为它内部会自动帮我们关闭流并且处理异常
'''
with open( 'context.txt','r',encoding='utf8' ) as fo:
for line in fo.readlines():
print( line )
#我的SCDN博客里有篇文章有稍微详细的说 'with' 关键字的哦~
首先我们得知道什么叫序列化和反序列化?:
序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象。
json是轻量级的文本格式。 两种数据类型:
列表:[元素,元素]
字典:{ “键”:“值” }
方法名 | 描述 |
---|---|
dumps | 把python数据类型序列化为json相应的数据类型格式,操作于内存 |
loads | 将json格式数据反序列为Python的相关类型的数据,操作于内存 |
dump | 说通俗一点就是序列的是磁盘上的文件,操作于磁盘 |
load | 反序列磁盘上的文件,操作于磁盘 |
举些例子:
import json
''' 1.dumps() '''
result=json.dumps( ['张三','李四','王五'] )
print(result)
-------------------------------------------------------------------------
["\u5f20\u4e09", "\u674e\u56db", "\u738b\u4e94"]
'''
在序列化时,中文汉字总是被转换为unicode码,
在dumps函数中添加参数ensure_ascii=False即可解决。
'''
result=json.dumps( ['张三','李四','王五'],ensure_ascii=False )
print(result)
-----------------------------------------------------------------------------
["张三", "李四", "王五"]
''' 2.loads()'''
print( json.loads( result ) )
-----------------------------------------------------------------------------
["张三", "李四", "王五"]
''' 3.dump() '''
#以上都是将数据序列化到内存中,以下要序列化保存到磁盘上
with open( 'temp.txt,'w' ) as fp:
json.dump( [ { 'name':'张三'},{'age':20 } ] ,fp) #序列化后写入' temp.txt'文件夹
''' 4.load() '''
with open('temp.txt,'r') as fp:
print(json.load( fp )) #将文件 'temp.txt'文件反序列化
------------------------------------------------------------------------------
[{'name': '张三'}, {'age': 20}]
pickle与json不同的地方是:pickle模块是对象序列化,json是对文本格式的序列化
它与json也有同样的方法:dumps(),loads()和dump(),load()方法,并且用法一致。上面已经有关于json这些方法的应用了,我在这就不多说那些了,就说下它的“对象序列化”。即可以把Python里面的对象序列化。
import pickle
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
return self.name+' '+str(self.age)
p1=Person( '张三',20 ) #p1现在是一个Person对象
fp=open('Person.txt,'wb')
pickle.dump( p1,fp ) #将p1对象存入' Person.txt ' 中
fp.close()
fp=open( 'Person.txt,'rb' )
pp=pickle.load( fp ) #将' Person.txt ' 中的内容序列化出来得到Person对象
fp.close()
print( pp.show() ) #记得pp是对象,需要调用show()方法才能得到相应的值
-------------------------------------------------------------------
张三 20
把Person对象序列化存入’ Person.txt ’ 文件中的结果为:
——好了,以上就是我对Python中对文件流的操作,以及对json和pickle的理解。有疑问或不足的地方欢迎私聊进行探讨,谢谢。