在上一篇文章中,简单介绍了打开文件的方法以及关于读、写、追加的操作,点击此处查看。

在此篇文章中,继续介绍另外一种打开文件的方法和几种同时读写的模式。

一、打开文件方法: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-文件基本操作(二)的更多相关文章

  1. Python文件遍历二种方法

    分享下有关Python文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现. 关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os ...

  2. [ Python入门教程 ] Python文件基本操作

    本文将python文件操作实例进行整理,以便后续取用. 文件打开和创建 Python中使用open()函数打开或创建文件.open()的声明如下: open(name[, mode[, bufferi ...

  3. Python文件基本操作及上下文管理

    文件基本操作 打开文件:f = open(fole_name,mode = 'r'),传入表示文件路径的字符串,会返回一个文件对象,mode是文件打开模式. 关闭文件:f.close(),调用给定文件 ...

  4. python文件基本操作(读,写,追加)

    一:只读(r) f=('d:\ python的联系文件'')   绝对路径和相对路径(绝对路径:能找到文件开始到结束路径,真实存在的路径,相对路径:在绝对路径一致的情况下新建一个文件) f=open( ...

  5. python文件操作 二

    问题:在传输的时候对方不知道是以什么格式传给用户,传来传去彼此都忘了什么格式: 在编码的时候:utf8:是3个字符,gbk是2个字符,每个字符数字对应的字符,一段2进制串,如果10个字节全部都是中文, ...

  6. Python 文件操作二

    readlines就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素 #coding=utf-8 f = ...

  7. [ Python入门教程 ] Python文件基本操作_shutil模块

    shutil模块是对os模块中文件操作的补充,提供文件和目录的移动.复制.打包.压缩.解压等功能 shutil常用函数   shutil.copyfile(src, dst)   复制文件, 如果ds ...

  8. notepad++上直接运行python文件

    一.打开notepad++,点击语言,选择python,这样就写的是python文件了 二.点击运行>运行:输入cmd /k python "$(FULL_CURRENT_PATH)& ...

  9. python文件(概念、基本操作、常用操作、文本文件的编码方式)

    文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...

  10. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)

    一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...

随机推荐

  1. Angular4+NodeJs+MySQL 入门-04 接口调用类

    上一篇文章说一下,后台接口的创建,这篇说一下如果调用接口. 创建一个目录helpers 此目录下有三个文件分别是 ApiClient.ts.clientMiddleware.ts.Core.ts,前面 ...

  2. 深入理解jQuery插件开发【转】

    如果你看到这篇文章,我确信你毫无疑问会认为jQuery是一个使用简便的库.jQuery可能使用起来很简单,但是它仍然有一些奇怪的地方,对它基本功能和概念不熟悉的人可能会难以掌握.但是不用担心,我下面已 ...

  3. 创建bat文件打开指定目录的cmd窗口

    默认的 cmd打开的是用户目录,如下: 有时,这样非常不方便,还得不断的cd到我们要使用的目录,例如,我们想改成默认制定的目录是D盘的cmd窗口 代码如下:    cmd /k cd/d " ...

  4. LintCode刷题小记491

    题目: 判断一个正整数是不是回文数. 回文数的定义是,将这个数反转之后,得到的数仍然是同一个数. 样例: 11, 121, 1, 12321 这些是回文数. 23, 32, 1232 这些不是回文数. ...

  5. ActiveReport报表更改连接字符串及参数

    PageReport pr = new PageReport (new FileInfo("报表路径")); //报表路径如../Order/OrderSale.rdlx if(p ...

  6. String常用操作

    常量池: 字符串一旦被初始化就不会被改变 String s="123"; s="abc"; System.out.print(s); 这段代码看上去s的值是被改 ...

  7. oracle学习篇八:约束

    ----约束------- --1.主键约束--唯一标识,不能为空,通常用于ID--1>创建主键create table person(id varchar2(20) primary key,n ...

  8. cf888G. Xor-MST(Boruvka最小生成树 Trie树)

    题意 题目链接 给出\(n\)点,每个点有一个点权\(a[i]\),相邻两点之间的边权为\(a[i] \oplus a[j]\),求最小生成树的值 Sol 非常interesting的一道题,我做过两 ...

  9. js中各个排序算法和sort函数的比较

    js中要实现数据排序,其实只需要用sort函数就能很好的满足了,但是我今天想知道他和其他排序算法的区别,比如耗时呀等.测了一组数据如下: // ---------- 一些排序算法 Sort = {} ...

  10. VS如何自动创建函数头 函数说明

    这样创建,这种方法在VS2008和VS2013下都可以. 这是效果 如何自定义格式呢? 第一步点击这个按钮 这个工具条需要安装VAssistX,如何安装这里不细说了. 第二步,点击这个按钮 第三步 点 ...