Python IOプログラミング

2914 ワード

ファイルの読み書き
  • ファイルを読むファイルは、ファイルの読み書き時に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()を呼び出すと、ファイルのすべての内容が一度に読み出され、ファイルが10 Gあるとメモリが爆発するので、念のためread(size)メソッドを繰り返し呼び出し、sizeバイトの内容を毎回最大で読み取ることができます.また、readline()を呼び出すと、1行のコンテンツを読み出すたびにreadline()を呼び出してすべてのコンテンツを1回読み出し、行ごとに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="">