Python程序教程

您现在的位置是:首页 >  Python

当前栏目

python之open函数

python,open,函数
2025-03-28 09:01:04 时间

大家好,又见面了,我是你们的朋友全栈君。

1 小序

1.0 功能

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

1.2 格式:

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

1.3 参数说明

序号

参数

描述

1

name

文件名

2

mode

操作文件模式

3

buffering

寄存状态,buffering设为0,访问不寄存,为1访问文件寄存,如果为大于1的整数,表明寄存区的缓冲大小

1.4 文件操作模式

序号

模式

描述

1

r

只读模式打开文件,文件的指针在文件开头,即从第一行第一列读取文件内容

2

rb

在二进制格式下以只读模式打开文件,,文件指针放在开头,即从第一行第一列读取文件内容

3

r+

读写模式打开文件,文件指针在开头

4

rb+

在二进制格式下以读写模式打开文件,文件指针在文件开头

5

w

以写模式打开文件,文件指针在文件开头,即从文件头开始编辑,原有内容被删除,如果文件不存在,会自动创建文件

6

wb

在二进制格式下以写模式打开文件,如果文件存在,从头开始编辑,原有内容被删除,文件不存在,自动创建文件

7

w+

读写模式打开文件,文件存在,从头开始编辑,原有内容被删除,文件不存在,自动创建文件

8

wb+

在二进制格式下以读写模式打开文件,从头开始编辑,原有内容被删除,文件不存在则自动创建文件

9

a

打开文件追加内容,如果文件存在,文件指针放在文件结尾,即继续先前的文件继续编辑,文件不存在,自动创建文件

10

ab

在二进制格式下追加文件内容,文件指针放在文件结尾,即继续先前的文件继续编辑,文件不存在,自动创建文件

11

a+

以读写模式追加文件内容,文件指针在文件结尾,即继续先前的文件继续编辑,文件不存在,自动创建文件

12

ab+

在二进制格式下追加文件内容,文件指针在文件结尾,即继续先前的文件继续编辑,文件不存在,自动创建文件

2 文件对象方法

序号

方法

描述

1

read([size])

size未指定则返回整个文件,如果文件大小>2倍内存则出现问题,read()读到文件末尾是返回空字符””

2

radline()

按行读取数据,返回一行数据

3

readlines([size])

按行读取数据,返回size行的数据列表,size未指定则返回全部行

4

for line in f

通过迭代器访问

5

write(“string”)

写入字符串数据,如果数据格式不是字符串,需要转为字符串格式

6

tell()

返回一个整数,表示当前文件指针的位置,即到文件起始位置的比特数

7

seek(offset,[start])

移动文件指针,offset为偏移量,单位为bit,可正可负,start为起始位置,0表示文件开始,1当前位置,2文件末尾

8

close()

关闭文件

格式:

# 使用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

直接遍历

使用循环按照行提取数据

2

read

将所有数据串成一个字符串,提取数据时按照字符串的操作方法

3

readline

按行读取数据,每次只读取一行,需要设置循环遍历

4

readlines

将所有数据按行读取,自动存储至list中,之后按照list操作


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


发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141301.html原文链接:https://javaforall.cn