zoukankan      html  css  js  c++  java
  • Python3入门(十一)——IO编程

    一、文件读写

      python的文件操作和C是兼容的

     1.读文本文件

     读文件操作如下:

    f = open("F:/1.txt", "r")
    data = f.read()
    print(data)

      其中"r"表示read,读文件,再使用read()方法就把文件内容读取出来了

      和Java一样,操作文件需要close掉,并且强烈建议在finally中close,代码如下:

    try:
        f = open("F:/1.txt", "r")
        data = f.read()
        print(data)
    finally:
        if f:
            f.close()

      但是!Python这里又支持了with操作,这比Java必须要写上面类似的代码确实要简洁不少:

    with open("F:/1.txt", "r") as f:
        print(f.read())

      这样,try finally以及close等全部可以省略了!

      这里read()也可以加参数size来限制读取的字节数,防止一次性读取太多而爆掉:

    print(f.read(4))

      或者按行读取也是阔以的:

    readline() # 读取一行
    readlines() # 读取所有行,返回list
    for line in f.readlines():
        print(line.strip()) # 把末尾的'
    '删掉

      这种带有read()方法的对象称为 file-like Object,常见的有StringIO

      2.读二进制文件

        使用rb模式打开即可:

    f = open("F:/1.jgp", "rb")
    f.read()

      3.字符编码

        默认是UTF-8,指定编码可以添加encoding参数

    f = open("F:/1.txt", "r", encoding="GBK")
    f.read()

         忽略一些乱七八糟的错误,可以使用errors

     f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

      4.写文件

        和读类似,w、wb进行文本文件、二进制文件的写,文件编码同读文件的操作

    with open("F:/1_new.txt", "w") as f:
        f.write("Hello Python3!")

        w是覆盖写的形式,追加使用a参数,完整参照文档

    二、StringIO与BytesIO

      1.StringIO

        在内存中读写string,称之为StringIO。它可以在内存中进行读写:

    from io import StringIO
    
    f = StringIO()
    f.write("Hello ")
    f.write("Python3!")
    print(f.getvalue())

        可以像文件一样进行操作:

    from io import StringIO
    
    f = StringIO("Hello
    Python3!")
    while True:
        line = f.readline()
        if line == "":
            break
        print(line.strip())

       2.bytesIO

    f2 = BytesIO()
    f2.write("我爱中国".encode("UTF-8"))

      注意这里写入的不是字符串string,而是经过编码后的bytes

    三、操作文件和目录

      使用例如dir cp等操作文件的命令,可以通过Python的os模块来实现,底层是通过调用系统的接口进行具体实现的:

    >>> import os
    >>> os.name # 操作系统类型
    'posix'——代表linux,nt代表windows,linux中还可以通过os.uname()来获取更加详细的信息

      1.获取环境变量:

    >>> os.environ #查看所有环境变量
    >>> os.environ.get('PATH') #获取特定变量

      2.操作文件和目录

        os.path中的部分操作:

    # 查看当前目录的绝对路径:
    >>> os.path.abspath('.')
    '/Users/michael'
    # 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
    >>> os.path.join('/Users/michael', 'testdir')
    '/Users/michael/testdir'
    # 然后创建一个目录:
    >>> os.mkdir('/Users/michael/testdir')
    # 删掉一个目录:
    >>> os.rmdir('/Users/michael/testdir')

      请注意路径的操作不要直接强行通过字符串拆分合并进行,而是使用os模块的方法!

      更多操作,参见相关文档

    四、序列化

      python通过 pickle 模块进行序列化操作!

      pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object

    >>> import pickle
    >>> d = dict(name='Bob', age=20, score=88)
    >>> pickle.dumps(d)
    
    >>> f = open('dump.txt', 'wb')
    >>> pickle.dump(d, f)
    >>> f.close()

      反序列化方法通过load方法实现:

    >>> f = open('dump.txt', 'rb')
    >>> d = pickle.load(f)
    >>> f.close()

      与JSON转换:

        类似Java的fastjson等对象与json的转换,python提供了json模块用来提供json字符串与dict的转换。好处与便利性不再赘述:

    >>> import json
    >>> d = dict(name='Bob', age=20, score=88)
    >>> json.dumps(d)
    #返回一个json的str字符串
    '{"age": 20, "score": 88, "name": "Bob"}'

      类似的,也提供了镜像方法loads,返回与JSON对应的dict

    >>> json.loads(json_str)

      JSON与对象的转换:

        上面介绍了默认的JSON字符串与dict的转换,当然肯定要有class对象与JSON的转换了:

        主要通过dumps()参数列表,实现一个class到dict的转换函数即可:

    def student2dict(std):
        return {
            'name': std.name,
            'age': std.age,
            'score': std.score
        }
    
    >>> print(json.dumps(s, default=student2dict))
    {"age": 20, "name": "Bob", "score": 88}
  • 相关阅读:
    weblogic详解
    Java中常见的5种WEB服务器介绍
    Eclipse 插件ibeetl
    Eclipse安装svn插件的几种方式
    在 Laravel 应用中使用 pjax 进行页面加速
    Pjax无刷新跳转页面实现,支持超链接与表单提交
    emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
    PJAX全局无刷新的设置方法~
    pjax使用小结
    jQuery+pjax简单示例汇总
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8946343.html
Copyright © 2011-2022 走看看