美文网首页Python入门系列
Python入门系列(七)——I/O

Python入门系列(七)——I/O

作者: RabbitMask | 来源:发表于2019-01-18 10:55 被阅读46次

    目录:
    一、界面I/O
    二、文件I/O

    一、界面I/O

    我也不知道这么称呼是否贴切,python首先要提到的就是用户交互界面的输入与输出,即键盘输入与页面输出,对应的函数为input()print()。这里重申下概念,其实我们一直有在使用了。

    关于input()的小技巧就是,input()也可以作为输出在界面打印出内容,但是!该内容不可作为键盘输入使用!详见第二章基本逻辑部分。

            print('输入不合法')
            print("")
            input("点击 enter 键返回首页")    #对,像这样~
            print("")
    

    关于print(),其实我们之前已经提到过格式化的问题了,再重申一点:因为 str.format()是比较新的函数, 大多数的 Python 代码仍然使用 % 操作符。但是因为这种旧式的格式化最终会从该语言中移除, 应该更多的使用 str.format()
    但格式化问题解决的是如何让输出中包含自定义内容,但对杂乱的结果怎么处理?如果强制字符串输出,这里补充两个函数 repr()str()

    a='hello.,\t\t\t\t\tworld'
    print('str()函数转化结果:{}'.format(str(a)))
    print('repr()函数转化结果:{}'.format(repr(a)))
    
    #输出:
    str()函数转化结果:hello.,                 world
    repr()函数转化结果:'hello.,\t\t\t\t\tworld'
    

    区别显而易见,str()旨在返回一个用户易读的表达形式,repr()旨在返回一个解释器易读的表达形式,所以后者将特殊符号一并返回,无视转义。

    二、文件I/O

    1、文件创建

    open()函数用以创建一个file对象,所有的读写操作也都是基于这个对象的。基本语法格式为open(filename, mode),其中mode即为打开文件的模式,拓展如下:

    r
    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    rb
    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
    r+
    打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+
    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    w
    打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb
    以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    w+
    打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb+
    以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    a
    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab
    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+
    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+
    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
    
    2、文件写入

    文件写入方式很单一,即open()方法,但值得一提的是,请务必要调用f.close()来关闭文件。
    因为当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。
    综合文件创建于写入,我们来改写我们第六章提到的异常处理小例子,把它改成日志记录异常吧。

    import time
    def error():
        try:
            a=1/0
            print(a)
        except ZeroDivisionError:
            print('你没错,老板说的都对')
            f = open('C:/Users/rabbitmask/Desktop/Source code/Python/AuotScan/bao/log.txt', 'a+')
            f.write('异常发生时间为:{}\n'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))))
            f.close()
        finally:
            print('我不管,反正程序运行完了')
            f = open('C:/Users/rabbitmask/Desktop/Source code/Python/AuotScan/bao/log.txt', 'a+')
            f.write('当前函数运行结束,时间为:{}\n'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))))
            f.close()
    
    if __name__=='__main__':
        error()
    
    #输出:
    你没错,老板说的都对
    我不管,反正程序运行完了
    
    #log.txt
    异常发生时间为:2019-01-18 10:12:57
    当前函数运行结束,时间为:2019-01-18 10:12:57
    

    于是我们成功做了一个简单的日志文件,用来记录我们的程序运行状态。

    3、文件读取

    先看概念,再看例子:

    f.read(size)
    为了读取一个文件一定数目的数据, 然后作为字符串或字节对象返回。
    f.read()
    当上述size为空或者为负, 那么该文件的所有内容都将被读取并且返回。
    f.readline()
    从文件中读取单独的一行。换行符为 '\n'。如果返回一个空字符串, 说明已经已经读取到最后一行。
    f.readlines() 
    将返回该文件中包含的所有行,包含特殊字符,拒绝转义。 
    
    def file():
        f = open('C:/Users/rabbitmask/Desktop/Source code/Python/AuotScan/bao/log.txt','r')
        a=f.read(10)
        f.close()
        f = open('C:/Users/rabbitmask/Desktop/Source code/Python/AuotScan/bao/log.txt', 'r')
        b=f.read()
        f.close()
        f = open('C:/Users/rabbitmask/Desktop/Source code/Python/AuotScan/bao/log.txt', 'r')
        c=f.readline()
        f.close()
        f = open('C:/Users/rabbitmask/Desktop/Source code/Python/AuotScan/bao/log.txt', 'r')
        d=f.readlines()
        f.close()
        print('a:\n', a)
        print('b:\n', b)
        print('c:\n', c)
        print('d:\n', d)
    
    if __name__=='__main__':
        file()
    
    #输出
    a:
     异常发生时间为:20
    b:
     异常发生时间为:2019-01-18 10:12:57
    当前函数运行结束,时间为:2019-01-18 10:12:57
    
    c:
     异常发生时间为:2019-01-18 10:12:57
    
    d:
     ['异常发生时间为:2019-01-18 10:12:57\n', '当前函数运行结束,时间为:2019-01-18 10:12:57\n']
    

    大家结合上面的概念于例子对应理解(顺序相同),还有一个小细节,看输出的内容,b于c之间,c于d之间,是有个空行的,而a、d后面没有,原因是因为在文件写入是我们的确写了,但a还没有读到转义符,d将转义符强行输出,所以都没有产生换行效果。

    到这里基础过的差不多了,关于os操作那块,目前觉得os.system('command')基本满足日常了,还是那个思路,具体内置函数或方法,我们尽可能多的提及,但不做展开。

    相关文章

      网友评论

        本文标题:Python入门系列(七)——I/O

        本文链接:https://www.haomeiwen.com/subject/nzygdqtx.html