Datawhaleチーム学習——Python基礎——ファイルとファイルシステム

15571 ワード

下の内容はdatawhale组队学习--Python基础から来て、自分の学习の记录に供して、転载してまたブログのリンクを添付してください!
目次
  • ファイルとファイルシステム
  • 知識点
  • 1. ファイルとファイルシステム
  • ファイルを開く
  • ファイルオブジェクトメソッド
  • 簡潔with文
  • 2. OSモジュールにおけるファイル/ディレクトリに関する共通の関数
  • 3. シーケンス化と逆シーケンス化
  • 練習問題
  • ファイルとファイルシステム
    インテリジェントポイント
    1.ファイルとファイルシステム
    ファイルを開く
    open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) Open file and return a stream. Raise OSError upon failure.
    #file:   ,    (        )。
    #mode:   ,      
    #buffering:     
    #encoding:     utf8
    #errors:     
    #newline:      
    

    一般的なmodeは次の表に示されています.
    開くモード
    アクションの実行
    ‘r’
    読み取り専用でファイルを開きます.ファイルのポインタはファイルの先頭に配置されます.これが既定のモードです.
    ‘w’
    書き込み用のファイルを開きます.ファイルが既に存在する場合はファイルを開き、先頭から編集を開始します.すなわち、既存のコンテンツが削除されます.ファイルが存在しない場合は、新しいファイルを作成します.
    ‘x’
    書き込みモードで、ファイルを新規作成します.ファイルがすでに存在する場合は、エラーが表示されます.
    ‘a’
    追加モードで、追加用のファイルを開きます.ファイルが既に存在する場合、ファイルポインタはファイルの最後に配置されます.すなわち,新しいコンテンツは既存のコンテンツの後に書き込まれる.ファイルが存在しない場合は、新しいファイルを作成して書き込みます.
    ‘b’
    ファイルをバイナリモードで開きます.一般的には、画像などの非テキストファイルに使用されます.
    ‘t’
    テキストモードで開く(デフォルト).一般的には、txtなどのテキストファイルに使用されます.
    ‘+’
    読み取り/書き込みモード(他のモードに追加可能)
    ファイル・オブジェクトのメソッド
    名前
    意味
    fileObject.close()
    開いているファイルを閉じるために使用します.閉じたファイルは読み書きができません.そうしないと、ValueErrorエラーが発生します.
    fileObject.read([size])
    指定された文字数をファイルから読み込み、指定されていないか負の場合はすべて読み込みます.
    fileObject.readline()
    「」文字を含む行全体を読み込みます.
    fileObject.readlines()
    終了子EOFまですべての行を読み取り、Pythonのfor...in...構造で処理できるリストを返します.
    fileObject.tell()
    ファイルの現在位置、すなわちファイルポインタの現在位置を返します.
    fileObject.seek(offset[, whence])
    ファイル読み込みポインタを指定した場所に移動します.①offset:最初のオフセット量、つまりオフセットを移動するバイト数を表し、負数であれば最後から何桁目からを表します.②whence:オプション、デフォルトは0です.offsetにパラメータを定義し、どの位置からオフセットを開始するかを示します.0はファイルの先頭から、1は現在位置から、2はファイルの末尾からです.
    fileObject.write(str)
    指定した文字列をファイルに書き込むには、書き込み文字の長さを返します.
    fileObject.writelines(sequence)
    ファイルにシーケンス文字列のリストを書き込み、改行が必要な場合は各行の改行を自分で加えます.
    簡潔なwith文
    (ps:不明)システムが正常に使用されたかどうかにかかわらず、一部のオブジェクトは標準的なクリーンアップ動作を定義し、必要がなくなると、この標準的なクリーンアップ動作が実行されます.
    キーワードwith文は、ファイルなどのオブジェクトが使用済みになると、そのクリーンアップ方法が正しく実行されることを保証します.
    try:
        f = open('myfile.txt', 'w')
        for line in f:
            print(line)
    except OSError as error:
        print('   !%s' % str(error))
    finally:
        f.close()
    
    #    !not readable
    

    このコードの実行が完了すると、処理中に問題が発生してもファイルfは常に閉じられる.
    try:
        with open('myfile.txt', 'w') as f:
            for line in f:
                print(line)
    except OSError as error:
        print('   !%s' % str(error))
    
    #    !not readable    
    

    2.OSモジュールにおけるファイル/ディレクトリに関する共通の関数
    よく使われるオペレーティングシステムとしては、Windows、Mac OS、Linu、Unixなどが知られています.これらのオペレーティングシステムの下部ではファイルシステムへのアクセスの原理が異なるので、どのファイルシステムモジュールを使用するかを異なるシステムについて考えるかもしれません.このようなやり方は非常に友好的で面倒です.これは、プログラムの実行環境が変わると、大量のコードを修正して対応することを意味します.
    OS(Operation System)モジュールがあれば、オペレーティングシステムの下でどのモジュールを使用するかに関心を持つ必要はありません.OSモジュールは正しいモジュールを選択して呼び出すことができます.
    名前
    意味
    os.getcwd()
    現在の作業ディレクトリに戻ります.
    os.chdir(path)
    現在の作業ディレクトリを指定したパスに変更できます.
    listdir (path=’.’)
    pathで指定したフォルダに含まれるファイルまたはフォルダの名前のリストを返します.
    os.mkdir(path)
    スローアウト例外が既に存在する場合は、単一レベルのディレクトリを作成します.
    os.makedirs(path)
    複数階層ディレクトリを再帰的に作成する場合に使用します.このディレクトリに放出例外がある場合は.
    os.remove(path)
    指定したパスのファイルを削除します.指定したパスがディレクトリの場合、OSErrorが放出されます.
    os.rmdir(path)
    単層ディレクトリを削除します.このフォルダが空である場合にのみ、OSErrorを放出します.
    os.removedirs(path)
    再帰的にディレクトリを削除し、サブディレクトリから親ディレクトリまで階層的に削除しようとしますが、ディレクトリが空でない場合は例外が放出されます.
    os.rename(src, dst)
    メソッドは、srcからdstまでのファイルまたはディレクトリの名前を付けるために使用され、dstが存在するディレクトリである場合、OSErrorが放出されます.
    os.system(command)
    システムのshellコマンドの実行(文字列をコマンドに変換)
    os.curdir
    現在のディレクトリ(.)
    os.pardir
    前のレベルのディレクトリを指します(...)
    os.sep
    オペレーティングシステム固有のパス区切り記号を出力します(winでは、Linuxでは/)
    os.linesep
    現在のプラットフォームで使用されている行終端子(winではr、Linuxでは)
    os.name
    現在使用されているオペレーティングシステム(mac、ntを含む)
    os.path.basename(path)
    ディレクトリパスを削除し、ファイル名を個別に返します.
    os.path.dirname(path)
    ファイル名を削除して、ディレクトリパスを個別に返します.
    os.path.join(path1[, path2[, …]])
    path 1,path 2の各部分を1つのパス名に組み合わせる
    os.path.split(path)
    ファイル名とパスを分割し、(f_path,f_name)メタグループを返します.ディレクトリを完全に使用すると、最後のディレクトリがファイル名として分離され、ファイルまたはディレクトリが存在するかどうかは判断されません.
    os.path.splitext(path)
    ファイル名と拡張子を分離し、(f_path,f_name)メタグループを返します.
    os.path.getsize(file)
    指定したファイルサイズを返します.単位はバイトです.
    os.path.getatime(file)
    指定したファイルの最近のアクセス時間を返します.
    os.path.getctime(file)
    指定したファイルの作成時間を返します
    os.path.getmtime(file)
    指定したファイルの最新の変更時間を返します.
    浮動小数点型秒数、使用可能time
    モジュールのgmtime()またはlocaltime()関数換算
    os.path.exists(path)
    指定したパス(ディレクトリまたはファイル)が存在するかどうかを判断します.
    os.path.isabs(path)
    指定したパスが絶対パスかどうかを判断する
    os.path.isdir(path)
    指定したパスが存在し、ディレクトリであるかどうかを判断します.
    os.path.isfile(path)
    指定したパスが存在し、ファイルであるかどうかを判断します.
    os.path.islink(path)
    指定されたパスが存在し、シンボルリンクであるかどうかを判断します.
    os.path.ismount(path)
    指定されたパスが存在し、サスペンションポイントであるかどうかを判断します.
    os.path.samefile(path1,path2)
    path 1とpath 2の2つのパスが同じファイルを指しているかどうかを判断します.
    3.シーケンス化と逆シーケンス化
    Pythonのpickleモジュールは基本的なデータシーケンスと逆シーケンス化を実現した.
    pickleモジュールのシーケンス化操作により、プログラムで実行されているオブジェクト情報をファイルに保存し、永続的に保存することができます.pickleモジュールの逆シーケンス化操作により、前回プログラムで保存したオブジェクトをファイルから作成できます.pickleモジュールで最もよく使用される関数は、次のとおりです.
    pickle.dump(obj,file,[,protocol])は、すでに開いているfileにobjオブジェクトをシーケンス化して格納する.
    obj:シーケンス化したいobjオブジェクト.file:ファイル名.protocol:使用するプロトコルをシーケンス化します.この項目が省略されている場合、デフォルトは0です.負またはHIGHEST_の場合PROTOCOLは、最高のプロトコルバージョンを使用します.pickle.load(file)は、file内のオブジェクトをシーケンス化して読み出す.
    file:ファイル名.
    import pickle
    
    dataList = [[1, 1, 'yes'],
                [1, 1, 'yes'],
                [1, 0, 'no'],
                [0, 1, 'no'],
                [0, 1, 'no']]
    dataDic = {0: [1, 2, 3, 4],
               1: ('a', 'b'),
               2: {'c': 'yes', 'd': 'no'}}
    
    #   dump()          
    fw = open(r'.\dataFile.pkl', 'wb')
    
    # Pickle the list using the highest protocol available.
    pickle.dump(dataList, fw, -1)
    
    # Pickle dictionary using protocol 0.
    pickle.dump(dataDic, fw)
    fw.close()
    
    #   load()            
    fr = open('dataFile.pkl', 'rb')
    data1 = pickle.load(fr)
    print(data1)
    data2 = pickle.load(fr)
    print(data2)
    fr.close()
    
    # [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
    # {0: [1, 2, 3, 4], 1: ('a', 'b'), 2: {'c': 'yes', 'd': 'no'}}
    

    練習問題
    1、中国語文字のドキュメントを開くと文字化けしてしまいますが、Pythonが持参した開くファイルで文字コードを指定できますか?それとも関連関数しか使えませんか?
    2、プログラムを書いて一番長い単語を探す
    ドキュメントの入力:res/test.txt
    タイトルの説明:
    """
       
    Input file
       test.txt
       
    Output file
       ['general-purpose,', 'object-oriented,']
       
    """
    def longest_word(filename):
        # your code here
            pass