美文网首页
Python IO编程

Python IO编程

作者: carolwhite | 来源:发表于2017-08-21 22:28 被阅读19次

    文件读写

    • 读文件
      由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:
    try:
        f = open('/path/to/file', 'r')   #二进制文件用'rb',特定字符编码encoding='gbk',忽略错误errors='ignore'
        print(f.read())
    finally:
        if f:
            f.close()
    

    可以用以下方法简写

    with open('/path/to/file', 'r') as f:
        print(f.read())
    

    调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

    • 写文件
    >>> f = open('/Users/michael/test.txt', 'w')
    >>> f.write('Hello, world!')
    >>> f.close()
    

    简写

    with open('/Users/michael/test.txt', 'w') as f:
        f.write('Hello, world!')
    

    操作文件或目录

    # 查看当前目录的绝对路径:
    >>> os.path.abspath('.')
    '/Users/michael'
    # 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来: ,这是因为windows和linux路径结构不一样
    >>> os.path.join('/Users/michael', 'testdir')
    '/Users/michael/testdir'
    # 然后创建一个目录:
    >>> os.mkdir('/Users/michael/testdir')
    # 删掉一个目录:
    >>> os.rmdir('/Users/michael/testdir')
    # 拆分路径
    >>> os.path.split('/Users/michael/testdir/file.txt')
    ('/Users/michael/testdir', 'file.txt')
    # 获得文件扩展名
    >>> os.path.splitext('/path/to/file.txt')
    ('/path/to/file', '.txt')
    # 对文件重命名:
    >>> os.rename('test.txt', 'test.py')
    # 删掉文件:
    >>> os.remove('test.py')
    #复制在shutil模块的copyfile()函数
    # 过滤文件
    >>> [x for x in os.listdir('.') if os.path.isdir(x)]
    ['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]
    

    序列化

    • Json
    import json
    
    class Student(object):
        def __init__(self, name, age, score):
            self.name = name
            self.age = age
            self.score = score
    
    s = Student('Bob', 20, 88)
    
    #序列
    print(json.dumps(s, default=lambda obj: obj.__dict__))
    
    • 反序列
      如果我们要把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict转换为Student实例:
    def dict2student(d):
        return Student(d['name'], d['age'], d['score'])
    
    
    >>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
    >>> print(json.loads(json_str, object_hook=dict2student))
    <__main__.Student object at 0x10cd3c190>
    

    相关文章

      网友评论

          本文标题:Python IO编程

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