首页 > 编程语言 > 详细

Python IO编程

时间:2019-04-27 15:36:29      阅读:123      评论:0      收藏:0      [点我收藏+]

 

1.文件读写

f.read()  f.write()

在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

1 #!/usr/bin/python3
2 
3 f = open(F:/a.txt, r)
4 print( f.readline() )  #读取一行内容
5 print ( f.read() )  #读取全部内容
6 f.close()   #文件对象会占用OS资源,使用完毕须关闭

技术分享图片

文件读写可能产生IOError,为保证无论是否出错都能正确地关闭文件:

1 #!/usr/bin/python3
2 
3 with open(F:/a.txt, r) as f:
4     print(f.read())

以上是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用‘rb‘模式打开文件,‘a’追加

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件。

1 f = open(F:/gbk.txt, r, encoding=gbk)

 

2.StringIO 

在内存中读写str

很多时候,数据读写不一定是文件,也可以在内存中读写。要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可:

1 #!/usr/bin/python3
2 
3 from io import StringIO
4 
5 f = StringIO()
6 f.write(hello )
7 f.write(chb)
8 print(f.getvalue())

技术分享图片

 

3.BytesIO

StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。BytesIO实现了在内存中读写bytes

1 #!/usr/bin/python3
2 
3 from io import BytesIO
4 
5 f = BytesIO()
6 f.write(中文.encode(utf-8))
7 print(f.getvalue())

技术分享图片

写入的不是str,而是经过UTF-8编码的bytes

 

4.操作文件和目录

操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中

技术分享图片
 1 import os
 2 
 3 os.path.abspath(.)  #查看当前目录的绝对路径
 4 os.path.join(F:/, python_code)   #合并路径
 5 os.path.splist(F:/a/b/c.txt)   #路径拆分
 6 os.path.splitext(‘‘)   #得到文件扩展名
 7 os.mkdir(F:/a/b)     #创建一个目录
 8 os.rmdir(F:/a/b)     #删除一个目录
 9 os.rename(a.txt, a.py)   #对文件重命名
10 os.remove(a.py)     #删除文件
11 
12 os.listdir()  #用于返回指定的文件夹包含的文件或文件夹名称
13 os.path.exists()   #可以直接判断文件是否存在
14 os.path.isdir(path)  #判断某路径是否为目录
15 os.path.isfile(path)  #判断某路径是否为文件
16 
17 #列出当前目录下的所有目录
18 [x for x in os.listdir(.) if os.path.isdir(x)]
19 
20 #列出所有的.py文件
21 [x for x in os.listdir(.) if os.path.isfile(x) and os.path.splitext(x)[1]==.py]
View Code

 

5.序列化

把变量从内存中变成可存储或可传输的过程,称之为序列化(永久性存储)

Python特定的序列化模块是 pickle

1 #!/usr/bin/python3
2 
3 import pickle
4 
5 d = dict(name = Chb, age = 21, score = 88)
6 f = open(F:/d.txt, wb)
7 pickle.dump(d, f)
8 f.close

把对象从磁盘读到内存时为反序列化

1 #!/usr/bin/python3
2 
3 import pickle
4 
5 f = open(F:/d.txt, rb)
6 print( pickle.load(f) )
7 f.close

技术分享图片

 

6.JSON

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

Python对象--------------->JSON格式

1 #!/usr/bin/python3
2 
3 import json
4 
5 d = dict(name = Chb, age = 21, score = 88)
6 print( json.dumps(d) )  #返回一个str 内容为标准的JSON

技术分享图片

JSON格式-------------->Python对象

1 #!/usr/bin/python3
2 
3 import json
4 
5 json_str = {"name": "Chb", "age": 21, "score": 88}
6 print(json.loads(json_str))

技术分享图片

 

Python IO编程

原文:https://www.cnblogs.com/bfcs/p/10778788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!