您的位置:首页 > 其它

文件输入输出以及定位、序列化

2018-01-04 15:33 176 查看
读和写文件:

open(filename, mode)


模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
举个列子:


f=open('G:/tan.txt','w+')
f.write('不做无法实现的梦')
f.close()
f=open('G:/tan.txt','r')
mystr=f.read()
print(mystr)
f.close()

》》》不做无法实现的梦

我在G盘中新建了一文件,因为格式是W+,所以是以读写的方法来打开的,如果目录里面有这个文件的话,会替换掉,没有的话则会新建一个。

这里有一个小问题,那就是文件以W+的形式打开后不能将其内容读取出来,所以这里我多做了一步,把文件关掉后又将其以R的模式打开,大家有兴趣的话可以试验一下。

以下是几种读文件的方式;

f.read(size);读取一个文件的内容,括号里面可以写参数,写了多少就读多少数目的数据,然后以字符串或者以字节对象的方式返回,

size可写可不写,不写的话则默认读取所有的数据

f.readline():会从文件中单独读取一行,如果返回一个空字符串,那么已经读取到最后一行了

f,readlines():会返回这个文件中包含的所有行,这里返回的是一个列表,和上面有所不同

写:

f.write(string):将括号里面的字符串写入到文件中

下面是文件的定位;

f.tell():返回当前文件对象当前的位置,它是从头开始算的字节数

f.seek():

    seek(x,0):表示从起始位置移动x个字符,0可以不用写

    seek(x,1):表示从当前位置往后移动x个字符

    seek(x,2):表示从文件的结尾往前移动x个字符

0--》起始位置    1---》当前位置   2---》文件末尾

这里定位要以二级制形式打开,

f=open('G:/pythonfile/tan.txt','rb')
mystr=f.read()
print(mystr)
f.seek(5,0)
# 从初始位置往后移动五个字符,所以输出的位置为5
print(f.tell())
f.seek(5,1)
# 从当前位置往后移动五个字符,因为上面以及移动了五个字符,所以这里的位置为10
print(f.tell())
# 读取所有的字符,所以光标会移动到文件末尾,输出的就是当前的位置:43
f.read()
print(f.tell())
# 从文件末尾往前意义五个字符,43-5=38,所以当前位置为38
f.seek(-5,2)
print(f.tell())

》》》b'\xcc\xec\xcf\xc2\xce\xde\xcb\xab\xb7\xa2\xb7\xa2v\xb7\xa2\r\nsafggdgggd\r\nfdgdgsdf\r\nvvfd'
》》》5
》》》10
》》》38
》》》43


序列化:

python的pickle模块实现了基本的数据序列和反序列化

通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储

pickle.dump(obj, file, [,protocol])

将obj以序列的形式存入file

x = pickle.load(file)

将flie里面的内容反序列化

扯了折磨多估计有人不懂了,简单来理解的话序列化就像把一个文件进行加密,反序列化就相当于解密,这下总能理解了吧,不理解的话不要紧,这里有个列子:

import pickle
dct={
'n':123,
'z':456,
'a':789
}
cls=dct
output=open('G:/pythonfile/xuelie.txt','wb')
# 将类序列化到文件xuelie.txt中
pickle.dump(cls,output)
output.close()
output=open('G:/pythonfile/xuelie.txt','rb')
x=pickle.load(output)

print(x)
output.close()


》》》{'n': 123, 'e': 456, 'a': 789}

这里先新建一个xuelie.txt的文件,然后将字典序列化到output文件指针里面,然后关闭文件,

然后在以只读二进制的方式打开,反序列化这个文件指针,将反序列化后的值存入到变量x中,然后输出,关闭文件。

没看错,就是这么简单,把他想象成文件的加密解密就好啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: