python-文件基本操作(二)
在上一篇文章中,简单介绍了打开文件的方法以及关于读、写、追加的操作,点击此处查看。
在此篇文章中,继续介绍另外一种打开文件的方法和几种同时读写的模式。
一、打开文件方法:with
使用file()或open()打开文件时,最后一定要使用close()方法来关闭文件,为了避免忘记使用,还使用使用with的方法开打开文件,代码如:
with open ('文件名','模式')   as  f:
    ...
其中,f为文件句柄,该打开文件的方式等同于f=open('文件名','模式')
此方法也可以一次打开多个文件,如:
with open ('文件名1','模式')   as  f1,open('文件名2','模式') as f2.....:
    ...
当文件过多时,会导致一行代码过长的情况,因此推荐使用如下写法:
with open ('文件名1','模式')  as  f1,\
    open ('文件名2','模式')  as  f2:
       ...
我们来使用closed()判断文件是否关闭
#使用open()方法打开,不加入close()
>>> f=open('info.log','r')
>>> print f.closed()
False #使用open()方法打开,加入close()
>>> f=open('info.log','r')
>>> f.close()
>>> print f.closed()
True #使用with打开
>>> with open ('info.log','r'):
>>> print f.closed() #注意print一定要与with处于同一个结构层次下
True
二、几种同时读写模式
在python中除了普通打开模式(r、w、a)外,还有几种同时读写的模式,包括:
r+:读写,可读可写,若文件不存在,报错
w+:写读,可读可写,创建新文件
a+:追加和读,可读可追加,若文件不存在,则创建
三、指针
为了便于理解同时读写模式,首先引入指针
有一个文件info.log 文件内容如下:

①获取文件句柄所在的指针tell()
例子:
>>> f=file('info.log','r')
>>> print f.tell()             #获取初始时的指针
>>> print f.readline()         #读取文件第一行
>>> print f.tell()             #获取读完第一行后的指针
>>> f.close()
0                       #第一次指针的位置
aaaa
5                              #第二次指针的位置
②设置文件句柄所在的指针seek()
例子:
>>> f=file('info.log','r')
>>> print f.tell()
>>> print f.readline()
>>> f.seek(3)             #设置指针位置
>>> print f.tell()
>>> f.close()
四、读写:r+
代码:
#使用r+打开文件时,不用read()
>>> f=open('info.log','r+')
>>> f.seek(5) #指针指向第二行
>>> print f.tell()
>>> f.write('1111')
>>> print f.tell()
>>> f.close()
5
9
文件结果:

注意:当使用r+打开文件时,如果使用了read(),那么不管指针在哪里,用write()方法时,新增的内容始终在文件结尾,除非在read()后重新指定了指针。如下:
>>> f=open('info.log','r+')
>>> f.readline()          #读取文件第一行内容
>>> print f.tell()
>>> f.write('1111')
>>> print f.tell()
>>> f.close()
5
25
文件结果:

五、写读:w+
>>> f=open('info.log','w+')
>>> print f.read()
>>> f.write('1111\n')
>>> f.write('2222')
>>> print f.tell()
>>> pring f.read()
>>> f.seek(0)
>>> print f.read()
>>> f.close()
#执行结果
                     #由于是w+模式,因此会先覆盖原文件内容,此时内容为空,print f.read()  结果为空
8                    #两次write()后,查看指针位置
                     #此时指针处于文件末尾,pring f.read()的结果为空
11112222             #重新把指针指向文件开头后,再print f.read(),有结果
六、追加读:a+
>>> f=open('info.log','a+')
>>> print f.tell()
>>> print f.read()
>>> f.write('1111')
>>> print f.tell()
>>> print f.read()
>>> f.seek(0)
>>> print f.read()
>>> f.close()
#执行结果
21                              #应为是a+模式打开,指针会指向文件结尾
                                #指针在文件结果,因此print f.read()内容为空
25                              #写入内容后,查看指针位置
                                #写入内容后,指针还是在结尾,因此print f.read()内容还是为空
aaaa                            #重新定位指针后,print f.read()出的内容
bbbb
ccccc
dddd
python-文件基本操作(二)的更多相关文章
- Python文件遍历二种方法
		
分享下有关Python文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现. 关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os ...
 - [ Python入门教程 ] Python文件基本操作
		
本文将python文件操作实例进行整理,以便后续取用. 文件打开和创建 Python中使用open()函数打开或创建文件.open()的声明如下: open(name[, mode[, bufferi ...
 - Python文件基本操作及上下文管理
		
文件基本操作 打开文件:f = open(fole_name,mode = 'r'),传入表示文件路径的字符串,会返回一个文件对象,mode是文件打开模式. 关闭文件:f.close(),调用给定文件 ...
 - python文件基本操作(读,写,追加)
		
一:只读(r) f=('d:\ python的联系文件'') 绝对路径和相对路径(绝对路径:能找到文件开始到结束路径,真实存在的路径,相对路径:在绝对路径一致的情况下新建一个文件) f=open( ...
 - python文件操作 二
		
问题:在传输的时候对方不知道是以什么格式传给用户,传来传去彼此都忘了什么格式: 在编码的时候:utf8:是3个字符,gbk是2个字符,每个字符数字对应的字符,一段2进制串,如果10个字节全部都是中文, ...
 - Python 文件操作二
		
readlines就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素 #coding=utf-8 f = ...
 - [ Python入门教程 ] Python文件基本操作_shutil模块
		
shutil模块是对os模块中文件操作的补充,提供文件和目录的移动.复制.打包.压缩.解压等功能 shutil常用函数 shutil.copyfile(src, dst) 复制文件, 如果ds ...
 - notepad++上直接运行python文件
		
一.打开notepad++,点击语言,选择python,这样就写的是python文件了 二.点击运行>运行:输入cmd /k python "$(FULL_CURRENT_PATH)& ...
 - python文件(概念、基本操作、常用操作、文本文件的编码方式)
		
文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...
 - python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)
		
一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...
 
随机推荐
- (转)DB2 restart database命令的作用总结
			
DB2 restart database命令的作用总结 原文:https://blog.csdn.net/qingsong3333/article/details/62049039 信息中心对于RES ...
 - (转)Linux 最大进程数
			
Linux 最大进程数 原文:https://www.cnblogs.com/pangguoping/p/5792075.html 前言 使用环境:centos 7系统 一.查看用户打开的最大进程数 ...
 - JAVA 利用反射自定义数据层框架
			
之前的随笔一直都在介绍c#,主要公司最近的业务都是做桌面程序,那么目前c#中的WPF肯定是我做桌面程序的不二之选,做了半年的WPF,也基本摸清了c#写代码的套路和规则(本人之前是两年多的JAVA开发者 ...
 - java泛型中的各种限制
			
java和其他语言一样,都支持泛型,包括泛型类和泛型方法,但是java的泛型比较特殊.因为java的泛型并不是在java诞生之初就加入的,在很长的一段时间里,java是没有泛型的,在需要泛型的地方,统 ...
 - java中HashMap的keySet()和values()
			
我们通常说,keySet()返回所有的键,values()返回所有的值,其实是不太对的,因为无论是keySet()和values(),其实都没有实质的内容,且容我慢慢说来. 他们前者返回了一个Set, ...
 - C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密
			
要求:密码必须包含数字和字母 思路:1.列出数字和字符. 组成字符串 :chars 2.利用randrom.Next(int i)返回一个小于所指定最大值的非负随机数. 3. 随机取不小于chars长 ...
 - nyoj 1023——还是回文——————【区间dp】
			
还是回文 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一 ...
 - nyoj 409——郁闷的C小加(三)——————【中缀式化前缀后缀并求值】
			
郁闷的C小加(三) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很 ...
 - C#程序执行时间
			
Stopwatch类 using System.Diagnostics; static void Main(string[] args) { Stopwatch stopWatch = new Sto ...
 - (四) HTML之表单元素
			
HTML中的表单元素,是构成动态网页的重要组成部分,因此,熟知表单元素是十分重要的.下面将根据表单中的一些常用标签进行介绍 1.单选按钮 <input type="radio" ...