• Python Linux系统管理之文件读写


    准备工作

    1、安装Ipython(请见”Ipython的安装”)

    2、实验用的文档(你自己用vi编辑器创建文件就好了)

    一、Python内置的Open函数

    在Python中,要对应文件进行操作,只要使用内置的Open函数打开文件即可。Open函数接受文件名和打开模式作为参数,返回一个文件对象。工程师通过文件对象来操作文件,完成以后,调用文件对象的close方法关闭文件即可。

    例如,在当前目录下有一个名为data的文件,它的内容如下:

    [root@master ~]# cat data 
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.

    接下来,使用Open函数打开文件,调用文件对象的read方法读取文件的所有内容,完成以后,调用文件对象的close方法关闭文件,如下所示:

    In [3]: f = open('data')                                                                                                                                                
    
    In [4]: print(f.read())                                                                                                                                                 
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    In [5]:  f.close()

    与其他编程语言类似,open函数默认以’r’模式打开,也可以指定文件的打开模式,如表所示。

    表 文件的打开模式

     下面代码分别演示,打开一个不存在的文件时’w’模式与’x’模式的区别:

    In [7]: f = open('data1.txt','w')                                                                                                                                       
    
    In [8]: f.write('Hello World')                                                                                                                                          
    Out[8]: 11
    
    In [9]: f.close()                                                                                                                                                       
    
    In [10]: f = open('data1.txt','x')                                                                                                                                      
    ---------------------------------------------------------------------------
    FileExistsError                           Traceback (most recent call last)
    <ipython-input-10-fc8069bb2b02> in <module>
    ----> 1 f = open('data1.txt','x')
    
    FileExistsError: [Errno 17] File exists: 'data1.txt'
    
    In [11]:                                                                                                                                                                
    
    In [11]:                                        
    In [11]: f = open('data2.txt','x')                                                                                                                                      
    
    In [12]: f.write('Hello World')                                                                                                                                         
    Out[12]: 11
    
    In [13]:                                                                                                                                                                
    
    In [13]: f.close()                                                                                                                                                      
    
    In [14]:                 

    二、避免文件句柄泄露

    在计算机程序中,每打开一个文件就需要占用一个文件句柄,而一个进程拥有文件的句柄是有限的。此外,文件句柄也会占用操作系统的资源,因此,在编写程序处理文件时需要注意,文件处理结束后及时关闭文件。文件句柄泄露或许是最常见的资源泄露问题,用finally关闭文件句柄。在Python中,也可以使用finally语句来保证,无论在什么情况下文件都会被关闭,如下所示:

    try:
    f = open(‘data.txt’)
    print(f.read())
    finally:
    f.close()

    Python中还有更加简洁优美的写法,即使用上下文管理器。虽然使用finally语句能够保证资源一定关闭,但是没有上下文管理器简洁好用。如果工程师可以在上下文管理器的情况下,使用了Finally语句,将会认为代码写的不够Pythonic。对于文件打开、处理、再关闭的逻辑,使用上下文管理器代码如下:

    with open(‘data.txt’) as f:
    print(f.read())

    可以看到,使用上下文管理器以后代码行数变少了。在Python中,如果想想把代码写的简洁优美,就应该在保证可读性的前提下代码行数越少越好。

    三、常见的文件操作函数

    Python的文件对象有多重类型的函数,如刷新缓存的flush函数,获取文件位置的tell函数,改变文件读取偏移量的seek函数。但是,工作中使用最多的还是与读写相关的函数。下面来看几个Python中的读写函数。

    Python提供了三个读相关的函数,分别是read、readline和readlines,他们的作用如下:

    • read:读取文件中的所有内容;
    • readline:一次读取一行;
    • readlines:将文件内容存到一个列表中,列表中的每一行对应于文件中的每一行。

    我们可以使用上边的”data.txt”文件,分别测试这三个读函数的效果:

    In [1]: f = open(‘data.txt’)
    In [2]: f.read()
    Out[2]: ‘Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. ’
    In [3]: f.seek(0)

    Out[3]: 0

    In [4]: f.readline()

    Out[4]: ‘Beautiful is better than ugly. ’

    In [5]: f.seek(0)

    Out[5]: 0

    In [6]: f.readlines()

    Out[6]:

    [‘Beautiful is better than ugly. ’,

    ‘Explicit is better than implicit. ’,

    ‘Simple is better than complex. ’,

    ‘Complex is better than complicated. ’]

    这里可以看到,read和readlines函数都是一次就将所有内容读入内存中,对于文件较小的情况不会有什么问题。但是,如果处理的是大文件,这种使用方法会占用大量的内存,甚至有可能因为内存占用太多出现Out-Of-Memory错误。

    Python提供了两个写函数,分别是write和writelines,他们的区别如下:

    • write:写字符串到文件中,并返回写入的字符串;
    • writelines:写一个字符串列表到文件中。

    依然使用Ipython对文件对象的写入函数进行测试,并在写入完成以后使用Linux的cat命令查看文件内容:

    In [1]: f = open(‘data.txt’,’w’)
    In [2]: f.write(‘Beautiful is better than ugly.’)
    Out[2]: 30
    In [3]: f.writelines([‘Explicit is better than implicit.’,’Simple is better than complex.’])

    cat data.txt

    在Python中,除了使用文件对象的write函数和writelines函数向文件写入数据以外,也可以使用print函数将输出结果输出到文件中。print函数比write和writelines函数更加灵活,如下所示:

    From __fureture__ import print_function
    With open(‘data.txt’,’w’)as f:
    print(1,2,’hello world’,sep”,”.file=f)
  • 相关阅读:
    CSS3实战之新增的选择器
    前端攻城狮学习笔记八:自己实现string的substring方法,人民币小写转大写,数字反转,正则优化
    负值之美:负margin在页面布局中的应用
    关于vs2015无法启动iis服务
    ado.net中的 sqlconnection sqlcommand datareader dataset SqlDataAdapter之间的关系
    C# Lambda表达式详细总结
    Response.cookies和Request.cookies
    Quartz CronTrigger最完整配置说明 陀螺
    浅析如何去除Strings中的C#空格 陀螺
    C#Winform中WebBrowser控件的特性和详细调用方法 陀螺
  • 原文地址:https://www.cnblogs.com/liujunjun/p/13475274.html
Copyright © 2020-2023  润新知