python之open函数

python之open函数1小序功能:打开某个文件,创建一个file对象,调用相关方法进行读写.格式:open(name[,mode[,buffering]])序号参数描述1name2mode3buffering

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

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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql的慢查询日志_docker查看日志最后100行

    mysql的慢查询日志_docker查看日志最后100行一.慢查询介绍MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过指定阀值的SQL语句,运行时间超过long_query_time值的SQL,会被记录到慢查询日志中。默认情况下,MySQL数据库并不启动慢查询日志,需要手动开启。如果不是调优需要的话,一般不建议开启,因为开启慢查询日志会或多或少带来一定的性能影响。在SQLServer中我们利用S…

    2022年10月10日
  • RSA加密算法简介[通俗易懂]

    RSA加密算法简介[通俗易懂]背景RSA加密算法是公钥密码最著名的算法之一,是由MIT三位(RonRivest,AdiShamir,LenAdleman)提出的,也就以三位的名字首字母命名。该算法的理论基础是“大数分解和素数检测“,如果说有一天,大数分解和素数检测的数学理论被证明可以简单解决,那么RSA算法的加密将没有任何意义。有提出说量子计算机的出现可以大大提高RSA的破解效率。下面我们将简单学习RSA加密算法的

  • c# dynamic用法_dynamic_cast详解

    c# dynamic用法_dynamic_cast详解dynamic是FrameWork4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性。比如,即使你

  • Xen VMM

    Xen VMMXen虚拟机即XenVMM(VirtualMachineMonitor),是剑桥大学计算机实验室开发的一个开源项目,它能够使用户创建更多的虚拟机,而每一个虚拟机都是运行在同一个操作系统上的实例。

  • SCOI 2016 bzoj 4567~4572 题解

    SCOI 2016 bzoj 4567~4572 题解bzoj4567[Scoi2016]背单词首先,我们发现如果有S(a)是S(b)的后缀,那么S(a)一定先加入那么倒着建字典树,每次dfs自己所有的儿子,看哪棵子儿子结束节点最多,按照这个顺序贪心儿子结束节点:遍历当前节点子树能够到达并且不经过其他结束节点的节点什么意思呢,假设说我们有一个aabb有一个abb,那么我计算abb的时候可以忽略aabb的贡献,这两个串对于b只

  • print()方法和println()方法的区别_println的用法

    print()方法和println()方法的区别_println的用法今天在写一个关于socket的程序,无意间把PrintWriter中的print与println混淆了,于是写了个小demo测试了一下,代码如下:服务端代码:packagecom.city.server;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号