Python(3)セット、ファイル操作、文字符号化、関数

18078 ワード

目次
集合操作ファイル操作文字符号化とトランスコード関数
一、集合操作
集合は無秩序で、重複しないデータの組合せであり、その主な役割は以下の通りである.
  • は重さを除去して、1つのリストを集合に変えて、自動的に重さを除去しました
  • 関係テスト、2組のデータをテストする前の交差、差セット、並列セットなどの関係
  • 1、常用操作
      
        list_1 = [1,1,2,3,4,5,6,6,7,7,8,8,9,9,3]
        set_1 = set(list_1)
        >>> set_1
        {1, 2, 3, 4, 5, 6, 7, 8, 9}
        #    {}  
       
        set_2 ={0,2,3,4}
        set_1.intersection(set_2)
      :
        set_1.union(set_2)
      :
        set_1.difference(set_2)
        # in set_1 but not in set_2set_1.issubset(set_2)
      :
        set_1.issuperset(set_2)
        :(      ,         )
        set_1.symmetric_difference(set_2)
        (set_1 | set_2) - (set_1 & set_2)
           ,   ,  True
        set_1.isdisjoint(set_2)

    2、シンボル操作
        & :           intersection
        | :          union
        - :          difference
        s <= t :     issubset
        s >= t :     issuperset
        ^ :        symmetric_difference

    3、集合添削
    set_1.add(99)
        
        set_1.update([1,2,3,4])
      :
        set_1.remove('h')  #      
        set_1.discard(99)  #     ,      。     
       :
        set_1.pop()
      :
        len(set_1)
          
        s in set_1  # (            ,     key)
       set “s”       
        s.copy()  

    二、ファイル操作
    ファイル操作の流れ1.ファイルを開くと、ファイルハンドルが得られ、変数2に値が割り当てられます.ハンドルでファイルを操作する.ファイルを閉じる
    次のコードで実行します.「print(date 2)」はtestファイルの内容を印刷しますか?
    f = open("test", 'r', encoding='utf-8')  #     :      
    data = f.read()
    data2 = f.read()
    print(data)
    print("date2".center(20, "-"))
    print(data2)

    コンテンツはありません.「data=f.read()」を実行すると、ファイルハンドルがファイルの末尾に移動し、再読み込みはコンテンツを取得できません.「seek」を使用してファイルハンドル1、ファイルオープンモードを移動する必要があります
        r:   ,       r
        w:  ,       ,
        a;  ,    
    
    "+"             
        r+ :  --  、  、   
        w+ :  --     ,  (              )
        a+ :   --         ,    seek(0)    ,         
        #   r w,seek          ,a+        
    
    "U"      ,    \r 
    \r

    ( r r+ ) rU r+U # windows \r
    "b" rb: wb: ab: # , encoding='utf-8' utf-8 , # “b” , ,

    2.1、ファイル操作
    open("1.txt", 'r', encoding="utf-8").read()
    # encoding="utf-8",utf-8      ,windows   gbk  
    
    f.read()                #              
    f.write("   ")       # r w  ,        ,a      
    f.flush()               #     (           )
    f.close()               #     
    f.closed()              #         
    
    f.read(5)               #   5   
    f.tell()                #         。      
    f.seek(0)               #         0     
    
    f.encoding              #     
    f.truncate()            #         
    f.truncate(10)          # r      10   ,        
  • ファイル読み込みについて:
  • f.readline()とf.readline()の違い:
    区別する
    コンテンツのロード
    を選択します.
    f.readline()
    ハンドルの行
    文字列
    f.readlines()
    すべての行をリストとしてロード
    リスト#リスト#
    したがって、f.readlines()は、現在どの行にあるかを下付きで知ることができます.ただし、f.read()と同様にファイルがメモリにフルロードされ、ファイルが大きいとメモリがいっぱいになります.
  • 推奨読取方式:
  • for line in f:  # f       
        print(line)
        #      ,        
  • プログラム:yumインストール時の進捗バーをシミュレート
  • import sys, time
    
    for i in range(20):
        sys.stdout.write("#")
        sys.stdout.flush()
        time.sleep(0.5)

    2.2ファイル内容修正前に述べたファイル修正は、元の内容を上書きするだけで、内容を挿入することはなく、元の内容を後ろに移動します.これにより、他のファイルを上書きし、ファイルが破損する可能性があります.so:ファイル修正の2つの方法:1.メモリへのロード、メモリの変更、上書き書き込み2.別のファイルを開き、修正して新しいファイルに書きます.
    with open("test", 'r', encoding='utf-8') as f, \
        open("test.tmp", 'w', encoding='utf-8') as f_new:
    
        for line in f:
            if "    " in line:
                line = line.replace("    ","fgf")
            f_new.write(line)
    
    # os.path.exists("test.bak")          
    # os.remove("test.bak")           
    # os.rename(test.tmp, test)      

    3.ファイルクローズ(with文)ファイルを開いた後にクローズを忘れないように、コンテキストを管理することができます.
    with open('log') as f:
        pass

    このように、withコードブロックの実行が完了すると、内部は自動的にファイルリソースを閉じて解放します.Python 2.7以降、withは複数のファイルのコンテキストを同時に管理することをサポートします.
    三、文字コードとトランスコード
    1、Python符号化の詳細なぜ「#-*-coding:utf-8-*-」という行を追加するのか.セットトップ符号化タイプutf-8符号化を意味します!なぜ私たちはこれらの文字、数字、画像、文字などの情報を見ることができますか?コンピューター自体が0 1の組み合わせしか認識できないことはよく知られていますが、彼らはどのようにこれらの内容を示していますか?私たちはどのようにコンピュータとコミュニケーションしますか?どうする?どのようにコンピュータに私たちの言語を理解させ、コンピュータの言語を理解させることができますか?ASCII(American Standard Code for Information Interchange、米国情報交換標準コード)は、ラテン文字に基づくコンピュータ符号化システムで、主に現代英語や他の西欧言語を表示するために使用されている.現在最も一般的なシングルバイト符号化システムであり、国際標準ISO/IEC 646に等しい.
    英語を保存するときは少なくとも1バイト(アルファベット1文字)が必要です.8ビット(bit)です.ASCIIテーブルの1バイトを見ると、すべての英語に必要な文字を表すことができます.非常に効率的ではありません.
    どうしてですか.初期のコンピュータの空間はとても貴重です!
    では、1バイト8ビットで、彼が格納できる最大データは2の8乗-1=255で、1バイトで255文字まで表すことができます.西洋では127文字を使っていますが、残りの文字は何をしていますか.拡張のために使われていますが、西洋人は他の国があることを考慮しています.だから拡張ビットを残した.ASCIIは他の国に着いて、全く足りないので、元の拡張ビットの中で、自分のgbk、gb 2312、gb 2318などの文字コードを拡張しました.彼はどのように拡張したのですか.例えばASCIIコードの中の128のこの位置で、この位置はまた1枚の単独の表を指定してそこですべての国はすべて自分の文字の符号化があって、1、文字のセットがありません:2、文字のセットの衝突は統一するために、Unicode(Unicode、Unicode、Unicode、Unicode、Unicode)は、コンピュータ上で使用される文字符号化Unicode(Unicode、Unicode、Unicode、Unicode)は、コンピュータ上で使用される文字符号化である.これは、各言語における文字ごとに統一かつ一意のバイナリ符号化が設定されており、ある文字や記号は少なくとも16ビットで表される(2バイト)ことを規定している.注意:ここでは、少なくとも2バイトを指しています.もっと多いかもしれません.ここでもう一つ問題があります.使用するバイトが増えたら、直接影響するのは使用する空間が直接2倍になります.
    問題を解決するために現れた:UTF-8符号化UTF-8符号化:Unicode符号化の圧縮と最適化であり、彼は最低2バイトを使用するのではなく、すべての文字と記号を分類する:ascii符号の中の内容は1バイトで保存し、ヨーロッパの文字は2バイトで保存し、東アジアの文字は3バイトで保存する...OK上で理解した:1、何のASCII符号化2、何のUnicode符号化3、何のUTF-8符号化は文字化の出現の原因を振り返ります:1、文字のセットがありません2、文字のセットの衝突がありません2、Python符号化はpython 3を変換して、デフォルトはunicode符号化です
    name = '  '
    #   UTF-8  
    print(name.encode('UTF-8'))
    #   GBK  
    print(name.encode('GBK'))
    #   ASCII  (     ?  ASCII          ~~)
    print(name.encode('ASCII'))

    Python2.Xの符号化変換python 2.XではASCIIコードがデフォルトで、ファイルではUTF-8として指定されていますが、UTF-8はGBKを転送したい場合は直接転送できません.Unicodeが転送サイトを作る必要があります.
    #-*- coding:utf-8 -*-
    import chardet
    
    tim = '  '
    print chardet.detect(tim)
    #     Unicode  ,    Unicode   GBK
    new_tim = tim.decode('UTF-8').encode('GBK')
    print chardet.detect(new_tim)
    
    #   
    '''
    {'confidence': 0.7525, 'encoding': 'utf-8'}
    {'confidence': 0.99, 'encoding': 'GB2312'}
    '''

    宣言はファイルの符号化にすぎずpython 3の変数はUnicode符号化である
    四、関数
    1、プログラム設計方法
    プログラミング方法
    とくせい
    プロセス向け
    プロセスdef
    関数に戻り値がありません
    オブジェクト向け
    クラスクラスクラス
    かんすうしきプログラミング
    関数def
    関数に戻り値がある
    (returnを定義せず、python暗黙的にNoneを返す.関数と関数式プログラミングは別で、思想は数学演算、数学上の関数に近い.抽象的な成都の高いプログラミングパターンである.関数式プログラミングの特徴の一つは、関数自体をパラメータとして別の関数に伝達することを許可し、また一つの関数を返すことを許可することである)
    2、関数基本構文および特性関数とは、文のセットを1つの名前(関数名)でカプセル化し、この関数を実行するには、その関数名を呼び出すだけです.関数は論理構造化とプロセス化のプログラミング方法である.機能:
  • コード多重
  • プログラムを拡張可能にする
  • は、プログラムのメンテナンスを容易にする
  • である.
    構文の定義
    def sayhi():  #    
        print("Hello, World")
    
    sayhi()  #     

    3、関数パラメータと局所変数パラメータ変数は呼び出されたときにのみメモリユニットを割り当て、呼び出しが終了したときに割り当てられたメモリユニットを即時に解放する.したがって、パラメータは関数内部でのみ有効です.関数呼び出しが終了してプライマリ呼び出し関数に戻ると、このパラメータ変数は使用できません.
    実パラメータは、定数、変数、式、関数などであってもよく、実パラメータがどのようなタイプの量であっても、関数呼び出しを行うときに、これらの値をパラメータに転送するために決定された値が必要です.そのため、パラメータが確定値を得るためにデフォルトパラメータがキーパラメータを渡さなければならない場合は、関数にパラメータを渡すには順番に、順番にしたくない場合はキーパラメータを使うことができ、パラメータ名を指定するだけでよいが、キーパラメータは位置パラメータの後に置かなければならないことを覚えておいてください.非固定パラメータ*argsは、複数の入力パラメータを1つのメタグループ形式に変更します**kwargsは、複数の入力パラメータを辞書形式に変更します.
    def test(**kwargs):
        pass
    #  **kwargs       
    test(name='fgf', sex='N')
    test(**{'name':'fgf','sex':'N'})

    グローバル変数とローカル変数がサブルーチンで定義される変数をローカル変数と呼び、プログラムの最初に定義される変数をグローバル変数と呼ぶ.グローバル変数役割ドメインはプログラム全体であり、ローカル変数役割ドメインはその変数を定義するサブプログラムである.
    トップクラスはすべてグローバル変数で、関数の中で変数は修正して、関数の中でglobal変数名をプラスして関数の中でグローバル変数を変えるべきではありませんて、往復して呼び出すため、乱れました.リスト、辞書、コレクションは、関数で変更できます.
    4、戻り値
  • 関数は、実行中にreturn文に遭遇すると、実行を停止し、結果
  • を返します.
  • 関数にreturnが指定されていない場合、この関数の戻り値はNone
  • です.
          :    
            =0None 
            =1 :object
            >1 : tuple

    5、関数の内部に再帰し、他の関数を呼び出すことができます.関数が内部で自身を呼び出す場合、この関数は再帰関数です.
    def calc(n):
        print(n)
        if int(n/2) ==0:
            return n
        return calc(int(n/2))
    
    calc(10)

    再帰的なプロパティ:
  • には、明確な終了条件
  • が必要である.
  • より深い再帰の場合、問題の規模は前回の再帰よりも
  • 減少しなければならない.
  • の再帰効率は高くなく、再帰階層が多すぎるとスタックオーバーフロー(コンピュータでは、関数呼び出しはスタック(stack)というデータ構造によって実現され、1つの関数呼び出しに入るたびにスタックフレームが追加され、関数が戻るたびにスタックフレームが減少する.スタックのサイズは無限ではないため、再帰呼び出しの回数が多すぎるとスタックオーバーフローを招く)
  • 6、匿名関数
    #    
    def calc(n):
        return n**n
    print(calc(10))
    
    #      
    calc = lambda n:n**n
    print(calc(10))

    匿名関数は主に他の関数と組み合わせて使用されます.以下のようにします.
    res = map(lambda x:x**2,[1,5,7,4,8])
    for i in res:
        print(i)

    7、高次関数変数は関数を指すことができ、関数のパラメータは変数を受信することができ、1つの関数は別の関数をパラメータとして受信することができ、このような関数は高次関数と呼ばれる.
    def add(x,y,f):
        return f(x) + f(y)
    
    
    res = add(3,-6,abs)
    print(res)

    転載は必ずこの出典を残してください.http://blog.csdn.net/fgf00/article/details/52167245
    eval()