zoukankan      html  css  js  c++  java
  • python学习8 文件的操作

    本文拷贝了on testing 的《python之文件操作:文件的读写》,只做学习之用

    python的文件读写通过

    一、用open函数

    二、对文件读写操作

    三、读取文件位置定位

    1. open函数open(file_name[,access_mode][,buffering]) 

    (1)参数说明

    open(file_name[,access_mode][,buffering])      打开文件,获得文件的句柄

    file_name:包含文件路径的字符串,可以是绝对路径也可以是相对路径,尽量使用绝对路径

    access_mode:打开文件的方式:r--只读(默认)   w--写之前清空  a--在原来的内容后写,都是针对字符串

    buffering:先写到缓存中,一般省略

    (2) 返回值

    该语句表示返回的是一个指向文件的指针,文件句柄。当以只读模式打开一个不存在文件时则会报错,

    当以写或者追加模式打开一个不存在的文件时,则创建该文件,若文件路径中有目录不存在,则报错

    (3)实例

    f = open('d:/i_love_xu.txt',w)

    2.mode文件操作模式

    r,w,a

    r+可读可写

    w+:打开一个文件用于读写。如果该文件已经存在则将其覆盖。如果该文件不存在,创建新文件

    a+:打开一个文件用于读写,如果该文件已经存在,则文件的指针将会放于末尾。文件以追加的模式加在后面,不存在,则创建新文件

    rb,wb,ab则用于读取非字符串类型的文件,用二进制形式进行

    3.open语句可以对文件进行的其他操作

    (1) fp.closed()----判读文件是否关闭,返回True则为关闭

    (2)fp.mode----输出读写模式,返回打开文件的访问模式

    (3) fp.name --- 返回文件名称

    (4)fp.close()----清空内存

    (5)----next()   用来读写多个文件的,把文件名放在一个文件中

    # for i in fp:
    # print i
    把一个file用for...in file这样的循环遍历语句时,就是调用next()函数来实现。
    文件句柄是一个迭代器???
     
    fp=open(fileName,'r')
     
    print fp.next()
    print fp.next()
    print fp.fileno() 判断当前操作的文件句柄是哪一个number
    fp.close()

    二、对文件作读写操作

    1、常规的读写操作
    (1)read([size])
    size:读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个" "符号。
     
    (2)、readline([size])
    调一次读取一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返回,并且结尾会有一个换行符" "。读完一行,文件操作标记移动到下一行的开头。
    返回的是字符串
     
    (3)、readlines([size])
    (3.1)参数
    size:指定很小的数字,会不生效,python 默认8k缓存区大小,需要大于8k生效
    读取文件的全部内容,这个函数的内部是通过循环调用readline()来实现的
    (3.2)返回值
    返回的是列表格式,每一行是列表的一个元素,并且结尾会有一个换行符" "
     
    (4)、writelines(seq)
    seq:把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符。
    注意:序列中的内容也必须是字符串类型的数据,才能成功写入文件。
     
    (5)、write(str)
    把str写到文件中,默认是不加换行符的,所以如果想换行的话,得手动加入换行符' '。

    2、使用linecache模块读取文件

    import linecache
    允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。
    (1)linecache.getlines(filename,lineno)
    从名为 filename 的文件中得到第 lineno 行。
    这个函数从不会抛出一个异常–产生错误时它将返回”(换行符将包含在找到的行里)。
    如果文件没有找到,这个函数将会在 sys.path 搜索。
    (2)linecache.getlines(filename) 返回列表
    从名为 filename 的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,并以 linenum-1 为元素在列表中的位置存储
    (3)linecache.clearcache()
    清除缓存,如果你不再需要先前从 getline() 中得到的行
    (4)linecache.checkcache([filename])
    检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用这个函数。
    如果省略 filename,将检查缓存里的所有条目。
    (5)linecache.updatecache(filename)
    更新文件名为 filename 的缓存。如果 filename 文件更新了,使用这个函数可以更新
    linecache.getlines(filename)返回的列表。
     
    另:读取文件之后你不需要使用文件的缓存时需要在最后清理一下缓存,使linecache.clearcache()清理缓存,释放缓存。
    这个模块是使用内存来缓存你的文件内容,所以需要耗费内存,打开文件的大小和打开速度和你的内存大小有关系。
    打印奇数行的文件:
    fp='e:\tmp\05.txt'
    list1=linecache.getlines(fp)
    for i in list1[::2]:
    print i

    三、读取文件的位置定位

    1、tell()
    返回当前操作文件读取到的位置
    一个中文:3个字节
    Windows下‘ ’(换行符)占两个字节,Linux下 mac下 .
    2、seek(offset[,from]) 移动游标到想去的位置
    from:,默认是0,2:从末尾开始计算偏移;1:从当前位置作为标准位置
    offset:移动的总距离,可以是正数,可以为负数
     
    三、读取文件的位置定位
    1、tell()
    返回当前操作文件读取到的位置
    一个中文:3个字节
    Windows下‘ ’(换行符)占两个字节,Linux下 mac下 .
    2、seek(offset[,from]) 移动游标到想去的位置
    from:,默认是0,2:从末尾开始计算偏移;1:从当前位置作为标准位置
    offset:移动的总距离,可以是正数,可以为负数
  • 相关阅读:
    一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者Rhino在服务端运行。
    关于jquery选择器的一些注意
    几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
    测试:你自认为理解了JavaScript?
    如何移除相邻两个 display: inlineblock 元素间的间隔
    Linux TCP 连接数修改
    CSS lineheight 和 verticalalign 精解(上篇)_依然梦想_百度空间
    pageX,clientX,offsetX,layerX的那些事
    在html5下 关于img与div之间的缝隙
    iframe自适应高度详解(希望对大家有用)
  • 原文地址:https://www.cnblogs.com/benbenxiaofeifei/p/9352227.html
Copyright © 2011-2022 走看看