当我们读取文件内容时,并不能重复的读取,比如一个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. springboot的restController使用swagger遇到的问题。

    在controller中使用swagger,使用注解ApiImplicitParam遇到一个问题 当方法的参数是走path的swggerui的参数展现是正常的, @PathVariable 但如果是走 ...

  2. CodeForces 221(div 2)

    A 无trick水题... /* * Author: Plumrain * Created Time: 2013-12-24 22:26 * File Name: B.cpp */ #include ...

  3. 【repost】如何学好编程 (精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你

    方法(一)编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的<游戏之旅--编程感悟>和梁 ...

  4. 从客户端(content="<span class="Apple-s...")中检测到有潜在危险的 Request.Form 值。

    从客户端(content="<span class="Apple-s...")中检测到有潜在危险的 Request.Form 值. 说明: 请求验证过程检测到有潜在 ...

  5. 在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android

    本例主要介绍 如何将 pbc 集成到quick-cocos2dx框架中,让我们的cocos2dx客户端Lua拥有编解码Protocol Buffers能力. 参考: 云风pbc的用法: http:// ...

  6. [CSS3] Text ellipsis

    Link: http://www.w3schools.com/cssref/tryit.asp?filename=trycss3_text-overflow div{ white-space: now ...

  7. ORACLE功能GREATEST功能说明具体实例

    1           语法 GREATEST(expr_1, expr_2, ...expr_n) 2           说明 GREATEST(expr_1, expr_2, ...expr_n ...

  8. 关于Xcode的Other Linker Flags

    背景 在ios开发过程中,有时候会用到第三方的静态库(.a文件),然后导入后发现编译正常但运行时会出现selector not recognized的错误,从而导致app闪退.接着仔细阅读库文件的说明 ...

  9. MySQL存储过程的基本函数(三)

    (1).字符串类 首先定义一个字符串变量:set @str="lxl"; CHARSET(str) //返回字串字符集 select charset(@str);+-------- ...

  10. composer之安装

    最近想要学习下yii框架,所以,就看了下官网,看到了貌似比较依赖composer这个东西,然后我就安装了,但是会有问题,安装不上等等问题,不论是windows还是linux命令行安装,都是因为一个问题 ...