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)


相关推荐

  • 四种方法求最长回文子串

    四种方法求最长回文子串所谓回文串,就是正着读和倒着读结果都一样的回文字符串。比如:a,aba,abccba都是回文串,ab,abb,abca都不是回文串。一、暴力法最容易想到的就是暴力破解,求出每一个子串,之后判断是不是回文,找到最长的那个。求每一个子串时间复杂度O(N^2),判断子串是不是回文O(N),两者是相乘关系,所以时间复杂度为O(N^3)。stringlongestPali…

  • IPNC dm368 sd烧写[通俗易懂]

    IPNC dm368 sd烧写[通俗易懂]http://e2e.ti.com/support/embedded/linux/f/354/t/87980.aspx

  • oracle创建数据库实例失败_oracle数据库实例名是什么

    oracle创建数据库实例失败_oracle数据库实例名是什么Oracle数据库实例的创建、删除、修改   以SUSE10SP2、Oracle10gR2为例。      本文中的数据库实例这一称谓应该换做数据库更为准确,数据库可以理解为是一个物理的静态概念,主要包括一些物理存在的数据库文件,而数据库实例则是一个动态概念,包括一些内存区域以及若干进程,数据库实例是对数据库进行操作的执行者。(20090714修改)   安装完Ora

  • linux如何安装docker_deepin安装docker

    linux如何安装docker_deepin安装docker安装前准备Linux系统下,版本需要不小于3.10.x目前docker安装只支持centOS7、centOS6.5也就是说centOS7是需要3.1以上内核centOS7是需要2.6以上内核linux输出命令uname-a这里用的是centOS7、3.1安装docker,大家最好也同步一下centOS7镜像可以从阿里云拉取一个,然后在搭建linux的时候跟之前版本差不多,只不过需要更改的点是vi/etc/sysconfig/network-scripts/ifcfg-

  • 业务测试用例模版与大数据测试用例模板

    业务测试用例模版与大数据测试用例模板前言:分享下业务测试用例模版与大数据测试用例模板业务测试用例模版与大数据测试用例模板一、业务测试用例模板二、业务测试用例模板一、业务测试用例模板需要下载模板请点击:业务测试用例模板下载二、业务测试用例模板需要下载模板请点击:大数据测试用例模板下载…

  • 一文搞懂双亲委派模型「建议收藏」

    一文搞懂双亲委派模型「建议收藏」类加载器虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。从Java虚拟机的角度来讲,只存在以下两种不同的类加载器:启动类加载器(BootstrapClassLoader),使用C++实现,是虚拟机自身的一部分所有其它类的加载…

发表回复

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

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