python之open函数

1 小序

1.0 功能

打开某个文件,创建一个file对象,调用相关方法进行读写.

1.2 格式:

open(name[, mode[, buffering]])

1.3 参数说明

序号参数描述
1name文件名
2mode操作文件模式
3buffering寄存状态,buffering设为0,访问不寄存,为1访问文件寄存,如果为大于1的整数,表明寄存区的缓冲大小

1.4 文件操作模式

序号模式描述
1r只读模式打开文件,文件的指针在文件开头,即从第一行第一列读取文件内容
2rb在二进制格式下以只读模式打开文件,,文件指针放在开头,即从第一行第一列读取文件内容
3r+读写模式打开文件,文件指针在开头
4rb+在二进制格式下以读写模式打开文件,文件指针在文件开头
5w以写模式打开文件,文件指针在文件开头,即从文件头开始编辑,原有内容被删除,如果文件不存在,会自动创建文件
6wb在二进制格式下以写模式打开文件,如果文件存在,从头开始编辑,原有内容被删除,文件不存在,自动创建文件
7w+读写模式打开文件,文件存在,从头开始编辑,原有内容被删除,文件不存在,自动创建文件
8wb+在二进制格式下以读写模式打开文件,从头开始编辑,原有内容被删除,文件不存在则自动创建文件
9a打开文件追加内容,如果文件存在,文件指针放在文件结尾,即继续先前的文件继续编辑,文件不存在,自动创建文件
10ab在二进制格式下追加文件内容,文件指针放在文件结尾,即继续先前的文件继续编辑,文件不存在,自动创建文件
11a+以读写模式追加文件内容,文件指针在文件结尾,即继续先前的文件继续编辑,文件不存在,自动创建文件
12ab+在二进制格式下追加文件内容,文件指针在文件结尾,即继续先前的文件继续编辑,文件不存在,自动创建文件

2 文件对象方法

序号方法描述
1read([size])size未指定则返回整个文件,如果文件大小>2倍内存则出现问题,read()读到文件末尾是返回空字符""
2radline()按行读取数据,返回一行数据
3readlines([size])按行读取数据,返回size行的数据列表,size未指定则返回全部行
4for line in f通过迭代器访问
5write(“string”)写入字符串数据,如果数据格式不是字符串,需要转为字符串格式
6tell()返回一个整数,表示当前文件指针的位置,即到文件起始位置的比特数
7seek(offset,[start])移动文件指针,offset为偏移量,单位为bit,可正可负,start为起始位置,0表示文件开始,1当前位置,2文件末尾
8close()关闭文件

格式:

# 使用open模式,在文件操作完毕,自动关闭文件
# 避免f.close()忘记的问题
with open('test.txt', 'a') as f:
	f.read()
	f.readlines()
	f.write("xindaqi")

3 案例

datas.txt文件内容

Allocation of 21299200 exceeds 10% of system memory
测试文件
并行操作
穿行操作

3.1 直接遍历open类

with open("./datas/datas.txt", "r") as f:
    print("open class: {}".format(type(f)))
    print("open value: {}".format(f))
    for data in f:
        print("data type: {}".format(type(data)))
        print("data: {}".format(data))
  • Result
    包含换行符.
open class: <class '_io.TextIOWrapper'>
open value: <_io.TextIOWrapper name='./datas/datas.txt' mode='r' encoding='UTF-8'>
data type: <class 'str'>
data: Allocation of 21299200 exceeds 10% of system memory

data type: <class 'str'>
data: 测试文件

data type: <class 'str'>
data: 并行操作

data type: <class 'str'>
data: 穿行操作

  • Analysis
    (1) open打开文件得到的是IO装饰器类,通过for循环可对该类进行遍历;
    (2) 遍历IO装饰器,获取每行数据(字符串);

3.2 文件单行读取

只读一行

with open("./datas/datas.txt", "r") as f:
    data = f.readline()
    print("data: {}".format(data))
  • Result
    包含换行符号.
data: Allocation of 21299200 exceeds 10% of system memory

按行读取所有文件

datas = []
with open("datas.txt", 'r') as f1:
	# 按行读取数据
	while true:
		# 去除换行符号
		a = f1.readline().strip('\n')
		# 写入列表
		datas.append(a)
		# 读到文件最后一行,退出
		if not a:
			break
# 列表去除空值
while '' in datas:
	datas.remove('')
  • Analysis
    (1) readline方法读取open类中的单行数据;
    (2) 需要使用循环遍历每一行数据,将读取的数据存储到list中;

3.3 文件多行提取

with open("datas.txt", "r") as f:
	datas = f.readlines()
	print("datas: {}".format(datas))
  • Result
datas: ['Allocation of 21299200 exceeds 10% of system memory\n', '测试文件\n', '并行操作\n', '穿行操作\n']
  • Analysis
    (1) readlines方法从open类中读取所有数据,并直接存储到list中,实现了readline的循环遍历+存储的功能;
    (2) 对readlines方法提取的数据处理和对list处理一致;

3.4 直接读取read

with open("./datas/datas.txt", "r") as f:
    datas = f.read().strip("\n")
    print("datas: {}".format(datas))
    for data in datas:
        print("data: {}".format(data))
  • Result
datas: Allocation of 21299200 exceeds 10% of system memory
测试文件
并行操作
穿行操作
data: A
data: l
data: l
data: o
data: c
...
data: 穿
data: 行
data: 操
data: 作
  • Analysis
    (1) read方法直接读取文件所有内容,作为一个字符串;
    (2) 遍历该数据即是遍历一个字符串;

3.4 文件写入

# a模式接着上一次结果继续写入
datas = ['xindaqi', 'zhangwenwen']
with open("datas.txt", 'a') as f:
	for data in datas:
		# 换行写入
		f.write(data+'\n')

4 总结

(1) with上下文管理器可对open的状态进行自动监管,当读取完成时可自动管理,无需使用close;
(2) 连续写入数据,使用a及可以实现在文件末尾操作的模式,列表去除空字节,使用remove;
(3) open数据提取有四种方法,直接遍历,read读取,readline读取,readlines读取,详见表4.1;

序号遍历方法描述
1直接遍历使用循环按照行提取数据
2read将所有数据串成一个字符串,提取数据时按照字符串的操作方法
3readline按行读取数据,每次只读取一行,需要设置循环遍历
4readlines将所有数据按行读取,自动存储至list中,之后按照list操作

[参考文献]
[1]http://www.runoob.com/python/python-func-open.html
[2]https://www.cnblogs.com/hackpig/p/8215786.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值