Python的open文件的读取方式有以下几种方法:

  read([size]):读取文件,如果传了size参数,则读取size字节,否则读取全部

  readline([size]):读取一行

  readlines([size]):读取完文件,返回文件每一行所组成的列表

例:

假如我有一个blogCblog.txt文件,文件内容为:

blogCblog

blog1Cblog

blog2Cblog

用read来读取一下

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.read()  #用read()方法读取文件内容
 print fr  #打印所读取到的内容

 #打印结果:
 #blogCblog
 #blog1Cblog
 #blog2Cblog

上面可以看到,用read()方法读取到的文件内容是和我们本来blogCblog.txt里面的内容是一样的,也就是read()方法没有传入size参数时是默认读取全部的。

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.read(4)  #用read()方法读取文件4个字节的内容
 print fr  #打印所读取到的内容

 #打印结果:blog

上面可以看到read() 方法传入了一个参数‘4’,也就是读取文件内容的4个字节,通过打印可以看到,确实是读取到了4个字节的内容‘blog’。如果你传入的参数(size)大于文件的大小,那么就会返回文件的全部内容。

现在用readline()来读取一下,还是那个文件:

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.readline()  #用readline()方法读取文件的一行内容
 print fr  #打印所读取到的内容

 #打印结果:blogCblog

上面可以看到用readline()方法读取文件的一行的内容,确实是读取到了blogCblog这一行内容,接着来看下传入了size参数的readline():

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.readline(4)  #用readline()方法读取文件的一行中的4字节内容内容
 print fr  #打印所读取到的内容

 #打印结果:blog

上面的结果跟read(4)的结果是一样的,那是不是就没有区别了呢,其实不然,区别大大的,我们来再加一行 f.readline(4):(如果传入的参数(size)大于行的大小,就会返回整行)

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.readline(4)  #用readline()方法读取文件的一行中的4字节内容内容
 fr = f.readline(4)  #再添加一行f.readline(4)
 print fr  #打印所读取到的内容

 #打印结果:Cblo

上面的代码第三行添加再添加了一行 f.readline(4),打印结果为Cblog。我们来再添加几行一行 f.readline(4)来看下:

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.readline(4)  #用readline()方法读取文件的一行中的4字节内容内容
 fr = f.readline(4)  #再添加一行f.readline(4)
 fr1 = f.readline(4)
 fr2 = f.readline(4)
 fr3 = f.readline(4)
 print fr, fr1, fr2, fr3  #打印所读取到的内容

 #打印结果:Cblo g
 #         blog 1Cbl

上面的代码第4、5、6行分别添加了一行 f.readline(4),并分别赋值给fr1、fr2、fr3,打印结果为:fr为Cblo、fr1为g、fr2为blog、fr3为1Cbl,从中可以看出readline()传入参数后是读取所传的字节数,当再次执行readline(4)的时候会从上次读取的位置开始读取,直到这行读取完毕,当当前行读取完毕再次使用readline(4)时会从下行开始,同样的readline()没有传参时是一样的,也就是读取文件的一行,当再次使用readline()时,读取第二行。

接着来看下readlines()的读取:

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.readlines()  #用readlines()方法读取文件
 print fr  #打印所读取到的内容

 #打印结果:['blogCblog\n', 'blog1Cblog\n', 'blog2Cblog']

上面结果确实是文件内容所组成的list,接着来看readlines()传入参数(size),会怎样:

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.readlines(4)  #用readlines()方法读取文件,传入4,读取4个字节
 print fr  #打印所读取到的内容

 #打印结果:['blogCblog\n', 'blog1Cblog\n', 'blog2Cblog']

咦?不是读取4个字节吗,怎么返回的还是list?跟想象的不同喔!其实readlins()的size跟read(),readline()的size是有区别的,readlines()的size是Python定义的sizehint,通过io.DEFAULT_BUFFER_SIZE可以知道Python定义的sizehint的大小,为了验证,把blogCblog.txt文件里面的内容改为1万行blogCblog,下面来看代码:

 import io
 print io.DEFAULT_BUFFER_SIZE

 f = open('blogCblog.txt')  #首先先创建一个文件对象
 fr = f.readlines(8192)  #用readlines()方法读取文件,传入8192,读取4个字节
 print len(fr)  #打印所读取到的内容长度

 #打印结果:8192
 

上面可以看到Python定义的sizehint的大小为8192字节,同时用readlines传入8192,并赋值给fr变量,再打印出fr的长度,fr为820(也就是820条blogCblog),也可以计算一下是否正确:blogCblog.txt文件里blogCblog为10个字节(包括\n),820*10=8200(字节),咦,不是读取8192字节吗,怎么读取了8200个字节呢,原来,当读取到820行的时候,还没有读完,只读到bl,因为是读行,所以会自动把第820行读完整。

注:操作完文件之后,记得要用close()方法关闭文件

Python文件处理之文件读取方式(二)的更多相关文章

  1. python 大文件以行为单位读取方式比对

    http://www.cnblogs.com/aicro/p/3371986.html 先前需要做一个使用python读取大文件(大于1G),并逐条存入内存进行处理的工作.做了很多的尝试,最终看到了如 ...

  2. JavaIO流——简单对文件的写入及读取(二)

    前文对Io字符流的输入进行了介绍,在这就不再讲了,简单的来写该怎么读取文件内容吧 public static void readFile(String Filename) throws IOExcep ...

  3. Django文件上传三种方式以及简单预览功能

    主要内容: 一.文件长传的三种方式 二.简单预览功能实现 一.form表单上传 1.页面代码 <!DOCTYPE html> <html lang="en"> ...

  4. 爬虫文件存储:txt文档,json文件,csv文件

    5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...

  5. python保存二维列表到txt文件,读取txt文件里面的数据转化为二维列表

    源码: # 读文件里面的数据转化为二维列表 def Read_list(filename): file1 = open(filename+".txt", "r" ...

  6. python读写Excel文件--使用xlrd模块读取,xlwt模块写入

    一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...

  7. 文件的创建,读取,写入,修改,删除---python入门

    转自:http://blog.163.com/jackylau_v/blog/static/175754040201181505158356/ 一.用Python创建一个新文件,内容是从0到9的整数, ...

  8. Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  9. CSV文件在Python中的几种处理方式

    Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文 ...

随机推荐

  1. POJ1159 Palindrome(dp)

    题目链接. 分析: 感叹算法的力量. 方法一: 设 dp[i][j] 为字符串 s, 从 i 到 j 需要添加的最少字符数. 那么如果 s[i] == s[j], dp[i][j] = dp[i+1] ...

  2. Centos6.x/Oracle11G 自动化静默安装配置脚本

    部分脚本截图如下,要想玩转联系Ruiy哥提供脚本下载路径,附件在本博客的文件栏中维护,为了避免懒人一味的索取别人的劳动成果特此如此; 想玩的Ruiy mail to you! 快6.1了,6.1娃子们 ...

  3. XSLT学习

    XSL 语言 XSL(eXtensible Stylesheet Language)是可扩展样式表语言,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言. XSL与xml CSS ...

  4. 给Eclipse提速的7个技巧(转载的)

      大约一个月前,我发表了一篇博客,其中介绍了对Eclipse的爱与恨. 有些人问我如何给Eclipse提速,这篇文章就来讨论这个问题.顺带提一下,这篇文章不是比较IDE,所以不要说你讨厌某个IDE而 ...

  5. UVA1588(Kickdown)。

    只需要固定长串,拿着短串移动就好了. 我是从右往左移动,需要注意的是要判断两头重叠部分(左端重叠和右端重叠)的大小关系. #include <iostream> #include < ...

  6. 机器学习实战__KNN1

    KNN的算法工作原理: 存在一个训练样本集合,样本集中每个数据都有确定的标签(分类),即我们知道样本集中每一数据与所属分类的对应关系.输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征 ...

  7. wxPython学习笔记(一)

    创建最小的空的wxPython程序 frame = wx.Frame(parent=None, title='Bare') frame.Show() return True app = App() a ...

  8. struts2中修改Action后刷新浏览器后不能及时更新

    在学习strut2的时候,发现如果修改配置文件中Action的时候,刷新浏览器并不能加载修改后的Action,只能关闭服务,重新开启server才能获取到,上网找了许多资料后发现只要在配置文件中加上下 ...

  9. 扩展欧几里德 POJ 1061

    欧几里德的是来求最大公约数的,扩展欧几里德,基于欧几里德实现了一种扩展,是用来在已知a, b求解一组x,y使得ax+by = Gcd(a, b) =d(解一定存在,根据数论中的相关定理,证明是用裴蜀定 ...

  10. OD: Vulnerability Detection

    终于看完第二篇漏洞利用原理高级篇,内容虽然看懂了,但深入理解不够,这部分内容以后还要不断强化. 第三篇是漏洞挖掘技术,篇首的话中,提到程序的不可计算性(图灵机的停机问题).希伯尔数学纲领的失败,结尾说 ...