设为首页 收藏本站
查看: 1061|回复: 0

[经验分享] Python入门笔记(15):对文件的操作(1)

[复制链接]

尚未签到

发表于 2015-4-22 11:41:11 | 显示全部楼层 |阅读模式
一、文件对象
  我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作。
  《Python 核心编程》上说的很晦涩,这里没有深刻理解到,希望有人能解释给我听。



>>> f = open('demo.txt','r')
>>> f

>>> type(f)

二、相关函数
  [1]、内建函数:open()
  提供了初始化输入/输出(I/O)操作的通用接口,成功打开一个文件后会返回一个文件对象,否则发生IOError异常。语法如下:



file_object = open(file_name,access_mode = 'r',buffering = -1)
  分析如下:
  1):file_name:表示要打开文件名字的字符串,可以是相对路径也可以是绝对路径。
如:我在D盘新建一个空白名为out的文本文件,然后进行相关操作。
DSC0000.png



>>> f = open('../out.txt','w')
>>> f.write('good')
>>> f.close()
  则打开该文件后,发现'good'已经写入进去了。
  接下来使用绝对路径进行访问,如下:



>>> f = open('D:/out.txt','r')
>>> f.read()
'good'
>>> f.close()
  2、可选变量access_mode也是字符串,代表文件打开模式。
DSC0001.png
  注意:
  1):使用'r'或'U'模式打开的文件必须已经存在
  2):'w'模式打开的文件若存在则先清空,然后重新创建
  3):'a'模式打开的文件是为了追加数据做准备的,所有写入的数据将追加到文件末尾。如果文件不存在,则自动被创建。
  4):'+'代表可读可写
  5):'b'代表二进制模式访问
  6):默认情况下是 'r'
  3、buffering可选参数,用于指示访问文件所采用的缓存方式。0表示不缓存;1表示只缓存一行,n代表缓存n行。如果不提供或为负数,则代表使用系统默认的缓存机制。
  用处?这个麻烦有人能告诉我!
  关闭文件:
  打开文件消耗系统资源, 并且依赖于文件模式, 其它程序或许不能访问它们。这就是一旦操作完毕就该关闭文件的重要所在。
  接上面的操作,加入还没有关闭:



>>> f.closed  #判断是否关闭
False
>>> f.close() #关闭方法
>>> f.closed
True
>>> f.tell()  #如果已关闭,则一切针对文件操作都无效

Traceback (most recent call last):
File "", line 1, in
f.tell()
ValueError: I/O operation on closed file
>>>
  
  [2]、工厂函数file()
  与open()一样,可相互替换



>>> f = file('../out.txt','r')
>>> f.read()
'good'
>>> f.close()
三、相关方法
  返回一个文件对象后(句柄),其实我也不清楚到底什么是句柄,这里摘自百度百科:

  句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实 例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。

  一般与文件相关的方法无非是:输入、输出、文件内移动、杂项
  [1]、输入
  1、read():读取字节到字符串中,有可选参数size,默认是-1,如果为-1或复数则文件将会被读取到文件末尾。



>>> f.read()
'good'
>>> f.read(2)
'go'
  2、readline():读取文件的一行,包括行结束符。同read()也有个可选参数size。
  3、readlines():读取所有(剩余的)然后将它们作为字符串列表返回,它有个可选参数sizhint代表返回的最大字大小。



>>> f = file('../out.txt','r')
>>> f.readlines()
['good']
   [2]、输出
  1、write():把含有文本数据或二进制数据块的字符串写入到文件中去。
  2、writelines():针对列表操作,接受一个字符串列表作为参数,将它们写入文件,行结束符并不会被自动加入,如果需要的话必须在调用writelines方法前给每一行结尾加上结束符。



>>> f =  open('d:/out.txt','w')
>>> f.writelines(['man'])
>>> f.close()
>>> f =  open('d:/out.txt','r')
>>> f.read()
'man'
  【注意:】
  当使用read()或者readlines()从文件中读取行时,Python并不会删除行结束符,这个操作留给了程序员。



>>> f.readlines()
['game is your life,game is your life,game is your life,game is your life,game is your life,
  • \n', 'game is your life,game is your life,game is your life[]']
    ---------------------------
    >>> f = open('demo.txt','r')
    >>> data = [line.strip() for line in f.readlines()]
    >>> data
    ['game is your life,game is your life,game is your life,game is your life,game is your life,
  • ', 'game is your life,game is your life,game is your life[]']
      类似的,write()和writelines()也不会自动加入行结束符,应该自己添加。



    >>> f = open('demo.txt','w')
    >>> f.writelines([' my name is BeginMan\n,I like coding'])
    >>> f.close()
      打开该文件可查看:
    DSC0002.png
       [3]、文件内移动
      tell()、seek()方法



    f = open('d:/out.txt','rb')
    print f.tell()  #[1]
    f.seek(10,1)    #[2]
    print f.tell()  #10
    print f.read(10)    # BeginMan,
    print f.read(18)    #I like coding.
    print f.tell()  #38
    """
    【1】:tell():
    tell 方法确认了已经移到当前文件位置
    一个文件对象维护它所打开文件的状态。文件对象的 tell 方法告诉你在打开文件中的当前位置。
    因为我们还没有对这个文件做任何事,当前位置为 0,它是文件的开始处。
    """
    """
    【2】:seek():
    文件对象的 seek 方法在打开文件中移动到另一个位置。第二个参数指出第一个参数是什么意思:
    0 表示移动到一个绝对位置 (从文件开始算起),
    1 表示移到一个相对位置 (从当前位置算起),
    还有 2 表示文件末尾
    """
    DSC0003.png
      [4]、文件迭代



    >>> f = open('d:/out.txt','rb')
    >>> for eachline in f:
    eachline

    'my name is BeginMan,\r\n'
    'I like coding.\r\n'
    四、相关属性
      file.closed:文件已被关闭,否则为False
      file.mode:文件访问模式
      file.name:文件名称



    >>> f.mode
    'r'
    >>> f.name
    'demo.txt'
      

  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59591-1-1.html 上篇帖子: [原创]win7环境下搭建eclipse+python+django开发环境 下篇帖子: python网络编程学习笔记(4):域名系统
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表