【python】IO编程

简介: 【python】IO编程
+关注继续查看

文件读写

try:
    f = open('/path/to/file', 'r')
    print(f.read())
finally:
    if f:
        f.close()

简化为下面的语法糖

with open(r"C:\test\test.txt", 'r') as f:
    for line in f.readlines():
        print(line.strip())  # 把末尾的'\n'删掉

这个文件中,每行的末尾都有一个看不见的换行符,而print 语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自print 语句。

调用read()会一次性读取文件的全部内容,但如果文件有10G,内存就爆了。所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

要读取二进制文件,比如图片、视频等等,需要用'rb'模式打开文件

非UTF-8编码的文本文件,需要给open()函数传入encoding参数

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略

f=open(r"D:\c盘来的\共享文件\bz\col.jpg","rb")
g=open("pic.jpg","wb")
while(1):
    a = f.read(8)
    if(not a):
        break
    g.write(a)
f.close()
g.close()

StringIO

from io import StringIO
f = StringIO()
f.write('hello')
print(f.getvalue())
f.close()

读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取

from io import StringIO
f = StringIO('Hello!\nGoodbye!')
s = f.readlines()
for i in s:
    print(i.strip())
f.close()

BytesIO

StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO

from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue().decode('utf-8'))

用一个bytes初始化BytesIO,然后可以像读文件一样读取

from io import BytesIO
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
print(f.read())

File.seek(1) File.seek(2) 0指针回到文件开头 1当前位置 2文件结尾

import io
# 写入二进制数据到 BytesIO 对象中
data = b"Hello, World!"
bio = io.BytesIO()
bio.write(data)
# 从 BytesIO 对象中读取二进制数据
bio.seek(0)
read_data = bio.read()
print(read_data)

在 Python 中,以 b 开头的字符串表示的是二进制字符串(bytes)。这种字符串是由字节组成的,每个字节都有一个对应的整数值,范围在 0 到 255 之间。二进制字符串与普通字符串不同,因为普通字符串是由 Unicode 字符组成的,每个字符都对应一个 Unicode 码点。

将二进制字符串转换成普通字符串,可以使用字符串的 decode() 方法。decode() 方法将一个字节串(bytes)转换成一个字符串(str),需要指定一个编码方式。在不知道编码方式的情况下,可以使用默认编码方式(通常为 UTF-8)

read_data = bio.read().decode()

文件和目录

import os
print(os.path.abspath('.'))
a=os.path.join('D:\c盘来的\py\pycharm', 'mypro\coleak')
print(a)
# os.mkdir(a)
os.rmdir(a)

os.path.split() 函数可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名

os.path.splitext() 可以直接让你得到文件扩展名

输出所由目录

import os
for x in os.listdir('.'):
    if os.path.isdir(x):
        print(x)

序列化

import pickle
d = dict(name='coleak', age=20, score=88)
e={"name":"coleak","age":19}
print(type(e))
print(pickle.dumps(d))
e=pickle.dumps(e)
print(pickle.loads(e))

存储到文件

import pickle
d = dict(name='Bob', age=20, score=88)
pickle.dumps(d)
f = open('a.txt', 'wb')
pickle.dump(d, f)
f.close()
f = open('a.txt', 'rb')
d = pickle.load(f)
print(d)
f.close()

JSON

import json
d = dict(name='Bob', age=20, score=88)
print(json.dumps(d))
f = open('a.txt', 'rb')
d = pickle.load(f)
print(d)
f.close()


目录
相关文章
|
2月前
|
数据采集 并行计算 Java
【文末送书】Python高并发编程:探索异步IO和多线程并发
【文末送书】Python高并发编程:探索异步IO和多线程并发
54 0
|
2月前
|
XML 存储 JSON
【100天精通python】Day29:文件与IO操作_XML文件处理
【100天精通python】Day29:文件与IO操作_XML文件处理
29 0
|
2月前
|
XML 存储 JSON
【100天精通python】Day28:文件与IO操作_JSON文件处理
【100天精通python】Day28:文件与IO操作_JSON文件处理
30 0
|
2月前
|
存储 数据处理 索引
【100天精通python】Day27:文件与IO操作_CSV文件处理
【100天精通python】Day27:文件与IO操作_CSV文件处理
19 0
|
2月前
|
存储 XML JSON
【100天精通python】Day26:文件和IO操作_文件指针的定位与移动,序列化与反序列化
【100天精通python】Day26:文件和IO操作_文件指针的定位与移动,序列化与反序列化
28 0
|
10月前
|
Python
Python编程:aiohttp和requests网络io性能比较
使用4 种方式 对网络发起10次请求,进行10次耗时测试
73 0
Python编程:aiohttp和requests网络io性能比较
|
10月前
|
存储 XML JSON
Python教程:IO
在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
72 0
|
开发者 Python
【Python零基础入门篇 · 35】:协程和IO操作的简单理解
【Python零基础入门篇 · 35】:协程和IO操作的简单理解
【Python零基础入门篇 · 35】:协程和IO操作的简单理解
|
调度 开发者 Python
【Python零基础入门篇 · 24】:协程和IO操作的简单理解、greenlet协程模块的使用、gevent模块的使用、程序打补丁、总结
【Python零基础入门篇 · 24】:协程和IO操作的简单理解、greenlet协程模块的使用、gevent模块的使用、程序打补丁、总结
【Python零基础入门篇 · 24】:协程和IO操作的简单理解、greenlet协程模块的使用、gevent模块的使用、程序打补丁、总结
|
Python
Python编程:aiohttp和requests网络io性能比较
Python编程:aiohttp和requests网络io性能比较
Python编程:aiohttp和requests网络io性能比较
相关产品
云迁移中心
推荐文章
更多