カリキュラムノート--006(IO操作、モジュール)20200320


IOプログラミング及びモジュール
  • 一、IOプログラミング
  • ファイル読み書き
  • ファイルを開く
  • ファイルを読む
  • 書き込みファイル
  • with文
  • 注:
  • 二、モジュール
  • モジュールの分類
  • システムモジュール(Python公式提供、内蔵モジュール)
  • サードパーティモジュール
  • カスタムモジュール
  • モジュールの導入
  • ビューモジュール
  • 内蔵モジュール
  • osモジュール
  • sysモジュール
  • time&datetimeモジュール
  • randomモジュール
  • mathモジュール
  • モジュールの定義
  • 一、IOプログラミング
    IOはコンピュータにおいてInput/Output、すなわち入出力を指す.プログラムとランタイムデータはメモリに存在するため、CPUという超高速なコンピューティングコアが実行し、データ交換に関わる場所は、通常ディスク、ネットワークなどであり、IOインタフェースが必要である.例えば、ブラウザを開いて、新浪のトップページにアクセスするには、ブラウザというプログラムはネットワークIOを通じて新浪のホームページを取得する必要があります.ブラウザはまず新浪サーバーにデータを送信して、私がトップページのHTMLがほしいことを教えて、この動作は外にデータを送って、Outputと言って、それから新浪サーバーはホームページを送って、この動作は外からデータを受信して、Inputと言います.したがって、通常、プログラムがIO操作を完了すると、InputとOutputの2つのデータストリームがある.もちろん1つしか使わない場合もあります.例えば、ディスクからファイルをメモリに読み込むと、Input操作しかありません.逆に、ディスクファイルにデータを書き込むと、Output操作にすぎません.
    ファイルの読み書き
    ファイルの読み書きは最も一般的なIO操作です.Pythonにはファイルを読み書きする関数が内蔵されており、使い方はCと互換性があります.
    ファイルを読み書きする前に、ディスク上でファイルを読み書きする機能はオペレーティングシステムによって提供されていることを理解しなければなりません.現代のオペレーティングシステムでは、一般的なプログラムがディスクを直接操作することは許されません.そのため、ファイルを読み書きすることは、オペレーティングシステムにファイルオブジェクト(通常はファイル記述子と呼ばれます)を開くように要求し、その後、オペレーティングシステムが提供するインタフェースを介して、このファイルオブジェクトからデータ(ファイルを読む)を読み取るか、このファイルオブジェクト(ファイルを書く)にデータを書き込む.
    ファイル操作に欠かせないのはopen関数です.ファイルを読み書きする前に、ファイルを開き、ファイルハンドルを取得する必要があります.
    注意:open()file()はできるだけopen()を使用し、Python 3以降はfile()はサポートされません
    ファイルを開く
    ファイルを読むモードでファイルオブジェクトを開くには、Pythonに組み込まれたopen()関数を使用して、ファイル名とラベルを入力します.
     open(file_name[,access_mode][,buffering][,encoding=None][,errors=None][,newline=None][,closefd=True][,opener=None])
    
    file_name:                        。        
    access_mode:       :         ,           (r)
    
                
        r                。              。      。
        w             ,
        a               (  EOF   ,         )
        r+             
        w+              (   w )
        a+              (   a )
        rb               
        wb                (   w )
        ab                 (   a )
        rb+                (   r+ )
        wb+                (   w+ )
        ab+                (   a+ )
    
    fp=open('D:\\TEACH\\Graduate\\PYTHON\\SUESPRG\\test.txt', 'r')
    

    この文は、返されるFile_を表します.objectは、ファイルへのポインタ(ファイルオブジェクト)ファイルハンドルです.例:
    fp=open('D:\\TEACH\\Graduate\\PYTHON\\SUESPRG\\test.txt', 'r')
    
      open                 
        (1)fp.closed
                      。  true        ,    false
        (2)fp.mode
                  。            。
        (3)fp.name:
                   。
        (4) fp.softspace
               print   ,        ,false   ,true   。
        (5)fp.close()
                           ,      ,           。
        (6)flush()
                            
                    ,       flush()  。
        (7)next()
               file for...in file          ,    next()     。
    

    ファイルを読む
    ファイルを開くことに成功した場合、read()メソッドを呼び出すと、ファイルのすべての内容を一度に読み取ることができ、Pythonは内容をメモリに読み込み、strオブジェクトで表します.
    s=f.read()
    

    ファイルを書く
    f.write(s)
    

    testファイルの内容は次のとおりです.
    Hello,Word!
    123
    2343
    
    fr = open('D:\\test.txt', 'r')
    fw = open('D:\\testw.txt', 'w')
    s=fr.read()     #'Hello, world!'
    print(s)
    fw.write(s)
    fr.close()
    fw.close()
    fw = open('D:\\testw.txt', 'a')
    x,y=3,-4
    z=[1,4,7,-9]
    s='
    '
    +str(x)+'
    '
    +str(y)++'
    '
    +str(z) fw.write(s) fw.close()

    with文
    しかし、毎回このように写実的で煩雑なので、Pythonはwith文を導入してclose()メソッドを自動的に呼び出すことができます.
    with open('D:\\test.txt', 'r') as f:
        print(f.read())
    

    これは前のtry...finallyと同じですが、コードはより簡潔で、f.close()メソッドを呼び出す必要はありません.
    注意:
    read()を呼び出すと、ファイルのすべての内容が一度に読み出され、ファイルが10 Gあるとメモリが爆発するので、念のためです.
  • はread(size)メソッドを繰り返し呼び出し、sizeバイトのコンテンツを毎回最大で読み出すことができる.
  • 呼び出しreadline()は、1行のコンテンツを1回に読み出すことができ、
  • .
  • readlines()を呼び出して、すべてのコンテンツを一度に読み取り、行別にlistを返します.したがって、必要に応じて呼び出す方法を決定します.
  • ファイルが小さい場合、read()は一度に読み取るのが最も便利です.ファイルサイズが特定できない場合は、read(size)を繰り返し呼び出して比較するのが安全です.
  • プロファイルの場合、readline()を呼び出すのが最も便利です:
  • #  txt  
    def openfile(fileename):
        data=[]
        with open(fileename, 'r',encoding='utf-8') as f:
            alllines=f.readlines()
            for line in alllines:
                line.strip()
                temp=line.split('\t')
                tempL=[]
                for j in range(len(temp)):
                    if j==0:
                        tempL.append(int(temp[j]))
                    else:
                        tempL.append(float(temp[j]))
                data.append(tempL)
        return data
    
    if __name__=='__main__':
        dirr='D:\\TEACH\\Graduate\\PYTHON\\SUESPRG\\'
        filee='Sample1.txt'
        fileename=dirr+filee
        data=openfile(fileename)
        print(data[0:3])
    if __name__=='__main__':
        dirr='D:\\TEACH\\Graduate\\PYTHON\\SUESPRG\\'
        filee='Sample3.data'
        fileename=dirr+filee
        OrigCatL,OrigNumL=openfile(fileename)
        print(OrigCatL[0:5])
        print(OrigNumL[0:5])
    
    #   data  
    def openfile(fileename):
        with open(fileename,mode = "r",encoding='utf-8') as fr:
            arrayOLines = fr.readlines()
            OrigCatL = []
            OrigNumL=[]
            for line in arrayOLines:
                line=line[:-1]
                listFromLine = line.split(",")
                if listFromLine[0] in ['F','I']:#abalone.data
                    OrigCatL.append(-1)
                else:
                    OrigCatL.append(1)
                temp=[]
                for j in range(1,len(listFromLine)):
                    temp.append(float(listFromLine[j]))
                OrigNumL.append(temp)
           
        return OrigCatL,OrigNumL
    
            
    if __name__=='__main__':
        dirr='D:\\TEACH\\Graduate\\PYTHON\\SUESPRG\\'
        filee='Sample3.data'
        fileename=dirr+filee
        OrigCatL,OrigNumL=openfile(fileename)
        print(OrigCatL[0:5])
        print(OrigNumL[0:5])
    

    また、OSライブラリから一括してファイルを読み取ることができます.詳細は記事を参照してください.
    二、モジュール
    モジュールの分類
    システムモジュール(Python公式提供、内蔵モジュール)
      :         ,builtins      
    	|-- random	
    	|-- math	
    	|-- os
    	|-- os.path
    	|-- sys
    	|-- time
    	|-- datetime
    	|-- hashlib
    	|-- base64
    

    サードパーティモジュール
    |--     ,       
      :        
    requests	# pip install requests
    

    カスタムモジュール
    xxx.py	      py     
    project->package->  
    

    モジュールのインポート
    import package import package as alias#別名import packageを使用する.module from package import module
    モジュールの表示
    Python自体には非常に有用なモジュールがたくさん内蔵されており、インストールが完了すればすぐに使用できます.pythonを使用する時間が長くなるにつれて、インストールされているpythonモジュールも多くなり、インストールされているpythonモジュールを表示したい場合は、次のようにします.
    一、コマンドライン下pydocコマンドを使用してコマンドライン下で$ pydoc modulesを実行して表示する
    二、pythonインタラクション解釈器でhelp()を使用して、インタラクション解釈器にhelp("modules")と入力すればよい.効果はコマンドラインに$ pydoc modulesと入力するのと同じである.
    内蔵モジュール
    一:osモジュール、(ファイルとディレクトリ)システムレベルを提供するための操作二:sysモジュール:解釈器に関する操作三:hashlibモジュール:md 5モジュールとshaモジュールの代わりに暗号化に関する操作を提供する.主にSHA 1,SHA 224,SHA 256,SHA 384,SHA 512,MD 5アルゴリズム四:shutilモジュール:高度なファイル、フォルダ、圧縮パケット処理モジュール(再帰、ファイルコピーなど)5:configparserモジュール:特定の構成を操作するため、6:logging:ログの記録を容易にし、スレッドを安全にするためのモジュール7:time&datetimeモジュール:時間関連の操作、時間は3つの表現があります:8:randomモジュール:ランダム数9:jsonとpickleモジュール10:shelveモジュール:簡単なk、vメモリデータをファイルを通じて持続化するモジュールで、pickleがサポートできるpythonデータフォーマットを持続化することができます
    osモジュール
    osモジュールはオペレーティングシステムとインタラクティブなインタフェースであり、os(operator system)オペレーティングシステムは主にオペレーティングシステムのファイルシステムを操作するために使用され、一般的な方法:
    |-- cpu_count	#        cpu  
    |-- getcwd	#       ,  ,        
    |-- curdir	# (  )      ,  ,    
    |-- chdir	#           
    |-- mkdir	#      ,  :      
    |-- makedirs	#      ,        
    |-- chmod	#     
    |-- listdir	#                     ,      
    |-- remove	#     
    |-- removedirs	#      ,  ,      
    |-- rename	#    
    |-- renames	#            
    |-- rmdir	#      ,  ,          ,       
    |-- scandir	#                     ,         
    |-- sep		#             
    |-- system	#                    
    

    os.pathモジュールは、osのサブモジュールが主にファイルを操作するために使用され、ファイルが存在するかどうか、ファイルかフォルダかなどを判断する.
    |-- abspath	#            
    |-- basename	#     ,            
    |-- exists	#              
    |-- getsize	#        ,       
    |-- isdir	#        
    |-- isfile	#        
    |-- join	#     		  :                 
    |-- split	#       ,                
    
    
    os.getcwd()         ,   python         
    os.chdir("dirname")            ;   shell cd
    os.curdir        : ('.')
    os.pardir                :('..')
    os.makedirs('dirname1/dirname2')             
    os.removedirs('dirname1')         ,   ,         ,     ,   ,    
    os.mkdir('dirname')          ;   shell mkdir dirname
    os.rmdir('dirname')           ,           ,  ;   shell rmdir dirname
    os.listdir('dirname')                    ,      ,        
    os.remove()        
    os.rename("oldname","newname")       /  
    os.stat('path/filename')      /    
    os.sep                  ,win  "\\",Linux  "/"
    os.linesep                 ,win  "\t
    ",Linux "
    " os.pathsep win ;,Linux : os.name 。win->'nt'; Linux->'posix' os.system("bash command") shell , os.environ os.path.abspath(path) path os.path.split(path) path os.path.dirname(path) path 。 os.path.split(path) os.path.basename(path) path 。 path / \ , 。 os.path.split(path) os.path.exists(path) path , True; path , False os.path.isabs(path) path , True os.path.isfile(path) path , True。 False os.path.isdir(path) path , True。 False os.path.join(path1[, path2[, ...]]) , os.path.getatime(path) path os.path.getmtime(path) path

    Sysモジュール
    Sysモジュールは、Pythonの実行時の構成およびリソースを処理するための多くの関数メソッドおよび変数を含む非常に実用的なサービスのセットを含み、従来のプログラム以外のシステム環境と対話することができる.
    import sys
    #     List,            
    print(sys.argv)
    #  ['D:/Pycharm Community/python    /sysTest.py']
    #  Python         
    print(sys.version)
    #  3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)]
    #   Int 
    #print(sys.maxint)
    #         ,      PYTHONPATH      (    ,    )
    print(sys.path)
    #          
    print(sys.platform) #win32
    #    ,     exit(0)
    print(sys.exit(0))
    

    time&datetimeモジュール
    3つの時間表示:Pythonでは、通常、時間を表す方法がいくつかあります.
    1、   (timestamp) :    ,        1970 1 1 00:00:00          。    “type(time.time())”,   float  。
    2、         
    3、  (struct_time) :struct_time    9        :( , , , , , ,      ,      ,   )
    
    import time
    #time.sleep(5)
    print("  5s")
    
    #sleep()  #           ,    
    #clock()
    #       ,           , unix   ,     '    ',        (   )
    # windows ,     ,             ,                       
    #   ,       
    #           (    , 1970 1 1 00:00:00         )
    t = time.localtime()
    print(t) #  time.struct_time(tm_year=2020, tm_mon=4, tm_mday=20, tm_hour=16, tm_min=53, tm_sec=3, tm_wday=0, tm_yday=111, tm_isdst=0)
    
    year = t.tm_year
    month = t.tm_mon
    print(year) #2020
    
    # gmtime()            UTC  (0  ) struct_time。
    #  utc   struc      
    print(time.gmtime()) #   time.struct_time(tm_year=2020, tm_mon=4, tm_mday=20, tm_hour=8, tm_min=53, tm_sec=3, tm_wday=0, tm_yday=111, tm_isdst=0)
    
    #-------           
    print(time.gmtime(time.time()-9000))
    #    time.struct_time(tm_year=2020, tm_mon=4, tm_mday=20, tm_hour=6, tm_min=23, tm_sec=3, tm_wday=0, tm_yday=111, tm_isdst=0)
    
    # -----        Fomart        
    print(time.mktime(time.localtime()))  #   1587372783.0
    
    # --             
    print(time.strftime("%Y-%m-%d %X",time.localtime())) #   2020-04-20 16:53:03
    

    randomモジュール
    import random
    

    randomモジュール:
    |-- random()		#     [0,1)    ,    !
    |-- randint(m, n)	#   [m,n]       
    |-- choice()		#             
    |-- randrange()		# random.randrange(x)        [0,x)     
    
    #0,1            float
    print(random.random())
    
    #                 1,2,3
    print(random.randint(1, 3))
    
    #              ,range     
    print(random.randrange(1, 3))
    
    #          
    print(random.choice([1, '23', [4, 5]]))
    
    #          
    print(random.sample([1, '23', [4, 5]], 2))
    

    mathモジュール
    このモジュールには多くのプログラミング言語が存在し,一般的にこのモジュールは数学演算を操作するために用いられる.
    |-- ceil		#          ,     
    |-- floor		#          ,     
    |-- e			#     
    |-- pi			#    
    |-- fabs		#     
    |-- fmod		#   (   ) fmod(x, y, /)  x % y
    |-- pow			#     
    |-- sqrt		#     
    

    モジュールの定義
    例えばabc.pyのファイルはabcという名前のモジュールで、xyzです.pyのファイルはxyzという名前のモジュールです.次に、abcとxyzの2つのモジュール名が他のモジュールと競合していると仮定し、パッケージを通じてモジュールを組織し、競合を回避することができます.mycompanyなどの最上位パッケージ名を選択し、次のディレクトリに保存します.
    mycompany
    ├─ __init__.py
    ├─ abc.py
    └─ xyz.py
    

    パッケージを導入した後、最上位レベルのパッケージ名が他の人と衝突しない限り、すべてのモジュールは他の人と衝突しません.今、abc.pyモジュールの名前はmycompanyになりました.abc、似たようなxyz.pyのモジュール名がmycompanyになりました.xyz .
    各パッケージディレクトリの下に__が1つあることに注意してください.init__.pyのファイル、このファイルは存在しなければなりません.そうしないと、Pythonはこのディレクトリをパッケージではなく普通のディレクトリと見なします.init.pyは空のファイルでもPythonコードでもいいです.init__.py自体がモジュールであり、そのモジュール名はmycompanyである.同様に、マルチレベルディレクトリがあり、マルチレベル階層のパケット構造を構成することができます.たとえば、次のディレクトリ構造があります.
    mycompany
    ├─ web
    │ ├─ __init__.py
    │ ├─ utils.py
    │ └─ www.py
    ├─ __init__.py
    ├─ abc.py
    └─ xyz.py
    

    ファイルwww.pyのモジュール名はmycompany.web.2つのファイルpyのモジュール名はそれぞれmycompany.それはあなたとweb.utils .
    自分でモジュールを作成するときは名前に注意し、Pythonが持っているモジュール名と競合してはいけません.例えば、システムにsysモジュールが付属すると、自分のモジュールはsysと命名できない.py、そうでないとシステムに付属するsysモジュールをインポートできません.
    import math
    
    def Dis_Eucl(x1,x2):#    
        x1=list(x1)
        x2=list(x2)
        tempsum=0
        for i in range(len(x1)):
            tempsum=tempsum+(x2[i]-x1[i])*(x2[i]-x1[i])
        tempdis=math.sqrt(tempsum)
        return tempdis
    
    
    def Dis_Manh(x1,x2):#     
        x1=list(x1)
        x2=list(x2)
        tempsum=0
        for i in range(len(x1)):
            tempsum=tempsum+abs(x2[i]-x1[i])
        return tempsum
    
    
    def Dis_Cheb(x1,x2):#      
        x1=list(x1)
        x2=list(x2)
        tempL=[]
        for i in range(len(x1)):
            tempL.append(abs(x2[i]-x1[i]))
        tempdis=max(tempL)
        return tempdis
    
    import math
    def Dis_Cos(x1,x2):#    
        x1=list(x1)
        x2=list(x2)
        tempsum12=0
        tempsum1=0
        tempsum2=0
        for i in range(len(x1)):
            tempsum12=tempsum12+x2[i]*x1[i]
            tempsum1=tempsum1+x1[i]*x1[i]
            tempsum2=tempsum2+x2[i]*x2[i]
        tempdis=1-tempsum12/(math.sqrt(tempsum1)*math.sqrt(tempsum2))
        return tempdis
    
    import sys
    import os
    dirr='D:\\TEACH\\Graduate\\PYTHON\\SUESPRG\\PackSample'
    sys.path.append(dirr)
    
    def dataLoad():
        Points = [[64, -34], [-25, 12], [22, 11], [90,-12],[24, 34], [25, 32], [34, 43], [45,0]]
        return Points
    
    if __name__=='__main__':
        Points=dataLoad()
    
    def CalDis(Points):
        m=len(Points)
        DisMat=[]
        for i in range(m):
            temp1=Points[i]
            Rowi=[]
            for j in range(m):
                temp2=Points[j]
                tempdis=round(DisFun.Dis_Manh(temp1,temp2),4)
                Rowi.append(tempdis)
            DisMat.append(Rowi)
    
        return DisMat
        
    def SaveR(dirr,filename,StrR):
        os.chdir(dirr)
        if not os.path.exists(dirr+'\\Result\\'): 
            os.mkdir('Result')
        Resultname=dirr+'\\Result\\'+filename
        with open(Resultname,'w') as fw:
            fw.write(StrR)
        return 'OK'