当我们读取文件内容时,并不能重复的读取,比如一个blogCblog.txt文件里有blogCblog内容,用两个read()方法读取blogCblog.txt的内容,会发现,第一个返回文件内容,第二个返回‘’。并不能重复读取,如果我想重复读取呢?怎么解决。

其实这跟文件指针有关,当我们对文件操作时,文件内部会有一个文件指针来定位当前位置,如图:

当open时文件指针是在初始位置1,当读取4个字节内容是文件指针位置就在4,再write时,文件指针从4移到8,所以,只要控制了文件指针,就能重复的读取了!

操作文件指针可以通过seek方法:

  seek(offset, whence):移动文件指针

  offset:偏移量,可为负数

  whence:偏移相对位置

偏移相对位置为os模块当中的SEEK_SET、SEEK_CUR、SEEK_END:

  os.SEEK_SET:表示文件的相对起始位置

  os.SEEK_CUR:表示文件的相对当前位置

  os.SEEK_END:表示文件的相对结束位置

来看下实例代码(一个blogCblog.txt文件里有blogCblog内容):

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 print f.read(3)  #用read()方法读取并打印
 print f.tell()  #打印出文件指针的位置
 f.close()  #关闭文件

 #打印结果:blo
 

上面可以看到用read(3)读取3个字节的内容,而tell()方法返回文件指针的位置。下面来操作文件指针:

 import os  #导入os模块
 f = open('blogCblog.txt')  #首先先创建一个文件对象,打开方式为w
 print f.read(3)  #用read()方法读取并打印
 print f.tell()  #打印出文件指针的位置
 f.seek(0, os.SEEK_SET)  #用seek()方法操作文件指针(把文件指针移到文件起始位置并移动0)
 print f.read(3)  #用read()方法再次读取并打印
 print f.tell()  #打印出文件指针的位置
 f.close()  #关闭文件

 #打印结果:blo

 #        blo
 

上面的代码就重复读取了,如果把第五行注释掉,那么第6、7行代码打印的结果为gCb和6,这是因为文件指针在第3,当再次读取时就在当前的文件指针向后移,这也就是为什么readline()会记住读取位置的原因了。而第5行代码的作用就是把文件指针移到初始位置!就实现了重复读取。

当你移到指针时,偏移量大于字符串长度时就会报IOError,需要注意!

Python文件处理之文件指针(四)的更多相关文章

  1. Python调用ansible API系列(四)动态生成hosts文件

    方法一:通过最原始的操作文件的方式 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 通过操作文件形式动态生成ansib ...

  2. python文件操作:文件指针移动、修改

    一.文件指针移动 二.修改   一.文件指针移动 #大前提:文件内指针的移动是Bytes为单位的,唯独t模式下的read读取内容个数是以字符为单位 # f.read(3) # with open('a ...

  3. Python 第三天 文件操作(2)

    文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  fi ...

  4. python学习-day18、文件处理、

    4.文件操作 武sir:http://www.cnblogs.com/wupeiqi/articles/4943406.html 林海峰:http://www.cnblogs.com/linhaife ...

  5. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  6. Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块

    Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数  linecache模块 目录 Pycharm使用技巧( ...

  7. 《转》Python学习(14)-对文件的操作(一)

    转自 http://www.cnblogs.com/BeginMan/p/3166644.html 一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python ...

  8. python之旅:文件处理

    一 文件操作及理论 1. 介绍 计算机系统分为:计算机硬件.操作系统.应用程序三部分我们用python或者其他程序,想要把数据永久的保存下来,就得写到硬盘里,但是应用程序是没有办法直接操作硬件的,这就 ...

  9. 2015/9/9 Python基础(10):文件和输入输出

    文件对象文件对象不仅可以用来访问普通的磁盘文件,而且也可以访问其它任何类型抽象层面上的“文件”.一旦设置了合适的“钩子”,你就可以访问文件类型接口的其它对象,就好像访问的是普通文件一样.文件对象的处理 ...

  10. python入门三:文件操作

    一.文件操作 1.文件对象:和c一样,要想对一个文件进行操作,需要获取该文件的对象 f = open("xxx") # 打开文件并获取文件对象 f.xxx # 对文件进行某些操作 ...

随机推荐

  1. cannot be deleted directly via the port API: has device owner network:floatingip

  2. Censored! - POJ 1625(ac自动机+简单dp+高精度运算)

    题目大意:首先给一个字符集合,这个集合有N个字符,然后需要一个长度为M的句子,但是据子里面不能包含的串有P个,每个串里面的字符都是有字符集和里面的字符构成的,现在想知道最多能构造多少个不重复的句子. ...

  3. Mongodb query查询

    Query.All("name", "a", "b");//通过多个元素来匹配数组Query.And(Query.EQ("name ...

  4. ab测试

    PS:网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网 ...

  5. UVa 496 Simply Subsets (STL&set_intersection)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=sh ...

  6. Java model 对象处理

    public class BaseFlowBo { /** * 流量 */ private String flow; /** * Pv */ private String pv; /** * CTR ...

  7. java參数传递机制浅析

    欢迎转载,转载请声明出处! ----------------------------------------- 前言: java语言中,參数的传递仅仅有一种机制.那就是值传递. 举例: 以下将通过几个 ...

  8. Reso | The Linux Command Line 的中文版

    http://book.haoduoshipin.com/tlcl/book/zh/ 本书是 The Linux Command Line 的中文版, 为大家提供了多种不同的阅读方式. 中英文双语版- ...

  9. 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式

    第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...

  10. RuntimePermissions

    This sample shows runtime permissions available in Android M and above. Display the log on screen to ...