Python系列13——输入与输出

一、文件的读写

在Python中用open()来打开一个文件,并返回一个流。

open(file, mode='r', buffering=-1, encoding=None, errors=None, 
newline=None, closefd=True, opener=None)

打开文件并返回流。失败时引发OSError
file: 文件路径
mode: 文件的读写模式
buffering: 是否设置缓冲区,及缓冲区的大小
encoding: 所打开文件的编码方式


# 写一个文件,命名为text.txt,存储路径为C:/Users/ilgfc/Desktop/test.txt
# 在打开该文件时,要注意该文件的编码方式
# 未指定文件编码方式
>>> f = open("C:/Users/ilgfc/Desktop/test.txt")
>>> f.read()			  
'鍖椾含\n涓婃捣 娣卞湷 aaa\nthank you \n?\nwhat'

# 指定文件编码方式utf-8,因为源文件编码方式为utf-8
# read()返回一个字符串
# readlines()返回一个列表
>>> f = open("C:/Users/ilgfc/Desktop/test.txt", encoding = 'utf-8')							  
>>> f.read()							  
'北京\n上海 深圳 aaa\nthank you \n?\nwhat'
>>> f.readlines()							  
['北京\n', '上海 深圳 aaa\n', 'thank you \n', '?\n', 'what']

# 源文件编码方式为utf-16le,指定文件编码方式为utf-16le
# readline()每次读取一行,相当于一个迭代器,会记住当前迭代的位置
# readline()返回一个字符串
>>> f = open("C:/Users/ilgfc/Desktop/test1.txt", encoding = 'utf-16le')							  
>>> f.readline()							  
'\ufeff北京\n'							  
>>> f.readline()							  
'上海 深圳 aaa\n'
>>> f.readline()							  
'thank you \n'
>>> f.readline()							  
'?\n'
>>> f.readline()							  
'what'
>>> f.readline()

>>> f = open("C:/Users/ilgfc/Desktop/test.txt", 'a', encoding = 'utf-8')							  
>>> f.write('hello world\n技术与科学\n')							  
18
>>> f.close()


>>> f = open("C:/Users/ilgfc/Desktop/test1.txt", 'a', encoding = 'utf-
16le')							  
>>> f.write('\n中国上海\n科技\nhhh')							  
12
>>> f.close()

以上读取的都是文本文件,当需要读取二进制文件时,mode='rn',便可进行二进制文件的读取

二、内存中字节的读取和字符串的读取

StringIO

# --------------读----------------
>>> from io import StringIO							  
>>> f = StringIO()							  
>>> f.write('北京欢迎你')							  
5
>>> f.write('\n你好呀')							  
4
>>> print(f.getvalue())							  
北京欢迎你
你好呀

# --------------写----------------
>>> f = StringIO('北京欢迎你\n你好呀')							  
>>> f.read()							  
'北京欢迎你\n你好呀'
>>> f.close()

BytesIO

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

>>> from io import BytesIO
>>> f = BytesIO()
>>> f.write('中文'.encode('utf-8'))
6
>>> print(f.getvalue())
b'\xe4\xb8\xad\xe6\x96\x87'

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

和StringIO类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值