博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-文件处理
阅读量:6505 次
发布时间:2019-06-24

本文共 3707 字,大约阅读时间需要 12 分钟。

hot3.png

测试环境:python2.7.12  &&  linux-cmd-python-cli

1.打开一个文件

file=open(name[,mode[buff]])  ####[,mode[buff]]的参数值是选填的,可以省略.

  1)name:文件的路径

  2)mode:打开方式

     [1]r:只读模式.文件必须存在

     [2]r+:读写方式,当写入的内容会替换掉文件中与之匹配相同字符的内容,文件必须存在

     [3]w:只写模式,文件不存在,创建文件,如果存在,文件内容会被清空.

     [4]w+:读写方式,文件不存在,创建文件,如果存在,文件内容会被清空.

     [5]a:追加模式,在文件结尾处添加文件.文件不存在的时候会自动创建文件.

     [6]a+:追加模式和读写模式

     [7]打开二进制文件:rb,wb,ab,rb+,wb+,ab+

  3)buf:缓冲区buffering的大小

  

  file.mode   ---->返回文件打开模式

  file.name  ---->返回文件名称

  dir(file)    ---->查看file可以操作的方法和属性

 

2.读取文件:

   1).read([size])   : 读取文件(读取size个字节,如果缺省size,则读取全部)

   2).readline([size]):  读取一行,如果size大小大于一行size大小,则显示这一行,如果size小于这一行size大小,则只显示该字符大小的内容,在使用readline(),显示剩下这一行的内容.

   3)readlines([size]): 不一定会读取完文件(需要看文件大小和io.DEFAULT_BUFFER_SIZE的大小),返回每一行所组成的列表(如果文件很大,会占用很大空间),当size>0时候,缓存中只会夹在io.DEFAULT_BUFFER_SIZE的字节数.只有当size不是正整数的时候才能获取到全部内容.

  可以通过遍历的方式读取文件内容: for in  file.readline():   print i

   4)iter迭代器读取文件内容:

       for i in iter(file):

             print i

     

3.写入文件:

   1)write(str):将字符串写入文件中

   2)writelines(sequence_of_strings):写多行到文件中  

   writelines写入的必须是字符串,元组和列表中的元素必须都是字符串,file.writelines(['1','2','3'])

   补充:写入的内容只有在如下两种方式的情况下,才会保存到文件中:

           [1]file.close()或者是f.flush()

           [2]当写入的内容超出缓存空间的时候,会将已经满的缓存内容写到文件中,超出缓存内容但是没有达到缓存最大值的,还是会在留在缓存

                for i in range(1,10000):

                      f.write('write test'+str(i)+'\r\n')     ----->文件中有9797行

                再次使用 f.flush()                                    ------>文件有9999行

 

4.文件关闭:

  file.close()    ---->如果打开的太多,超过系统文件打开最大值.文件就会无法打来.

  file.fileno()  ------>显示当前系统中已经打开的文件数

  查看系统中打开文件最大值:ulimit -a

 

5.文件定位:          

file.tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。           file.seek(offset [,from])方法改变当前文件的位置。                    

Offset变量表示要移动的字节数。

From变量指定开始移动字节的参考位置。                    

如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

 #如果偏移量超出文件的字节数,会报错.

 

6.文件属性:

   1)file.fileno() 文件描述符

   2)file.mode  文件打开的权限模式

   3)file.encoding 文件编码格式

   4)file.closed()    文件是否关闭    ---->False 没关闭   ,True 关闭

7.标准文件:

   1)文件的标准输入: sys.stdin

   2)文件标准输出: sys.stdout

   3)文件标准错误: sys.stderr

 

8.文件编码(输入中文):

  1)f.write(unicode.encode(u'你好','utf8')

f.flush()----->文件中就可以输入中文.但是在查看a=unicode.encode(u'你好','utf8'),查看a的时候'\xe4\xbd\xa0\xe5\xa5\xbd'

  2)使文件在打开的时候就被定义成utf8编码:

     import codecs

     #open(filename, mode='rb', encoding=None, errors='strict', buffering=1)

     f=codecs.open('test','r+','utf8')

     f.encoding

     --->回显   'utf8'

     f.write(u'特别')

     f.flush()    ---->文件中就可以输入中文

 

9.os模块对文件的操作:

  import os  

  1).打开文件:f=os.open(filename,flag[,mode])

  flag--->打开文件方式:

     os.O_CREAT:创建文件

     os.O_RDONLY:只读方式打开

     os.O_WRONLY:只写方式打开

     os.O_RDWR:读写方式打开

   2).读取文件: os.read(f,buffersize)

   3).写文件:   os.write(f,'要写的内容') ---->返回字节数,或者说是指针位置

   4).文件指针操作: os.lseek(f,pos,how) ----->返回指针位置

   5).关闭文件: os.close(f)

 

 10.os模块方法的其他使用 

    1)判断文件权限: os.access('path',mode)--->mode:os.F_OK 文件是否存在  os.R_OK 读权限  os.W_OK 写权限  os.X_OK 执行权限

    2)返回当前目录下所有文件的列表:  os.listdir('path')

    3)修改文件名称: os.rename('old','new')

    4)删除文件: os.remove('path')

       5)创建单级目录: os.mkdir('path'[,mode])

       6)创建多级目录:os.makedirs('./ceshi1/ceshi2/ceshi3')  

       7)删除目录:  os.rmdir('path')

       8)删除多级目录:os.removedirs('./ceshi1/ceshi2/ceshi3')

 

   11.os.path模块方法的使用:

        1)当前路径是否存在: os.path.exists(path)

        2)是否是目录:  os.psth.isdir(s)

        3)是否是文件: os.path.isfile('path')

        4)返回文件的大小: os.path.getsize('path')

        5)返回路径的目录: os.path.dirname(path)

        6)返回路径的文件名: os.path.basename(path)

 

 12.利用ConfigParser模块管理ini文件

     1)创建一个实例: cfg=ConfigParser.ConfigParser()

     2)将文件加载到实例中:  cfg.read('文件名')

     3)查看文件中的sections的值: cfg.sections()    

        for  se  in cfg.sections()

               print  se

               print  cfg.items()

查询结果:

userinfo    ----->section的值

[('name', 'wang'), ('passwd', '123456'), ('addr', 'bj')]   ------>item的值

study

[('python_base', '15'), ('python_junior', '20')]

      4)修改/添加item的值:  

         cfg.set('section','item-key','item-value')    ------->如果这个item-key不存在,会添加此key和value到section中

      5)删除item的值:

         cfg.remove_option('section','item-key')

      6)删除一个section:

         cfg.remove_section( 'section')

       7 )添加一个section:

          cfg.add_section('section')

       8)文件的保存:

          f=open('文件名',w+)

          f.write(f)

          f.close()

转载于:https://my.oschina.net/WYU3CHEN/blog/995385

你可能感兴趣的文章
CSS3秘笈第三版涵盖HTML5学习笔记9~12章
查看>>
bzoj1044木棍分割
查看>>
leetcode-136-Single Number
查看>>
微信小程序笔记<五> 页面管理及生命周期(route)——getCurrentPages()
查看>>
http服务器小项目
查看>>
JS案例:Jq中的fadeOut和fadeIn实现简单轮播(没完善,简单实现)
查看>>
一些数学上的名词及操作
查看>>
C# DataGridVie利用model特性动态加载列
查看>>
IPv6 地址分类
查看>>
<%@ include %>指令和<jsp:include>区别
查看>>
因为文件组 'PRIMARY' 已满 解决办法
查看>>
Flume 读取实时更新的日志文件
查看>>
HDU 2049
查看>>
《Spring1之第十次站立会议》
查看>>
Unity Shader 噪声消融特效 - 剑灵死亡特效
查看>>
Eclipse 自动生成 Ant的Build.xml 配置文件
查看>>
添加一条信息到列表,如果重复就替换,
查看>>
C#基础第五天
查看>>
宝明34
查看>>
python 小数相加报错 invalid literal for int() with base 10
查看>>