python內置模塊(二)

-------------------接《python內置模塊(一)》--------------------------------html


4、json、pickle 數據序列化python

    用於序列化的兩個模塊shell


    • json,用於字符串 和 python數據類型間進行轉換json

    • pickle,用於python特有的類型 和 python的數據類型間進行轉換windows

        Json模塊提供了四個功能:dumps、dump、loads、loaddom

        pickle模塊提供了四個功能:dumps、dump、loads、loadide

        # pickle.dumps 經過特殊的形式將數據轉換成只有python能認識的字符串
函數

    >>> import picklespa

    >>> data = {'lihongye1':'pwd1','lihongye2':'pwd2'}日誌

    >>> p_str = pickle.dumps(data)

    >>> print(p_str)

    或將字符串轉換成只有python能認識的字符串存儲在文件中

    test = { 'user':'lihongye','pwd':'pwd1','num':'123'}

    import pickle

    fw = open('test_file','wb')

    fw.write(pickle.dumps(test))

    經過pickle.loads 將字符串轉成原數據形式

    import pickle

    fr = open('test_file','rb')

    frp = pickle.load(fr)

    print(frp)


    # 也可經過json.dumps方式將數據轉成全部程序都能認識的字符串格式並寫入文件

    test = { 'user':'lihongye','pwd':'pwd1','num':'123'}

    import json

    fw = open('test_file','w')

    fw.write(json.dumps(test))

    經過json.loads方式將字符串轉換成原數據格式

    import json

    fr = open('test_file','r')

    frp = json.load(fr)

    print(frp)

5、 random

     隨機數

     >>> import random

        >>> random.random()           # 隨機小數

        0.7558096251338481

        >>> random.randint(1,3)       # 有範圍的隨機數1-3

        2

        >>> random.randrange(1,10)    # 有範圍的隨機數1-9

        1

     隨機驗證碼實例
        import  random

        check_code = ''

        for i in range(4):

            current = random.randint(0,4)

            if current != i:

                tmp = str(chr(random.randint(65,90)))

            else:

                tmp = random.randint(0,9)

            check_code += str(current)

        print(check_code)

6、 subprocess 執行系統命令

    call 執行系統命令,若是命令正確則返回狀態碼,不然拋出異常

            >>> res = subprocess.call(['ls','-l'],shell=False)

             >>> res = subprocess.call(['ls -l'],shell=True)

            shell = True 調用系統平臺執行命令;

      check_call 執行命令,若是執行狀態碼是 0 ,則返回0,不然拋異常

        >>> res = subprocess.check_call(['ls -l'],shell=True)   結果是0

             >>> res = subprocess.check_call(['ls-l'],shell=True)    結果異常

      check_output 執行命令,若是執行狀態碼是 0 ,則返回結果,不然拋異常     

             >>> res = subprocess.check_ouput(['ls -l'],shell=True)   返回執行結果

             >>> res = subprocess.check_ouput(['ls-l'],shell=True)   結果異常

      Popen   用於執行更加複雜的系統命令

         可用參數:

             args:      shell命令,能夠是字符串或者序列類型(如:list,元組)

             bufsize:   指定緩衝。0 無緩衝,1 行緩衝,其餘 緩衝區大小,負值 系統緩衝

             stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄

             preexec_fn:只在Unix平臺下有效,用於指定一個可執行對象(callable object),它將在

                         子進程運行以前被調用

             close_sfs: 在windows平臺下,若是close_fds被設置爲True,則新建立的子進程將不會繼承

                         父進程的輸入、輸出、錯誤管道。因此不能將close_fds設置爲True同時重定向

                         子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。

             shell:同上cwd:用於設置子進程的當前目錄env:用於指定子進程的環境變量。若是env =                               None,子進程的環境變量將從父進程中繼承。universal_newlines:不一樣系統的換行

                    符不一樣,True -> 贊成使用 \nstartupinfo與createionflags只在windows下有效將被

                    傳遞給底層的CreateProcess()函數,用於設置子進程的一些屬性,如:主窗口的外觀,

                    進程的優先級等等                            

            >>>res=subprocess.Popen(['python3'],stdin=subprocess.PIPE,                                                 stdout=subprocess.PIPE,stderr=subprocess.PIPE)

            >>> res.stdin.write(b"print('hello1')\n")

            16

            >>> res.stdin.write(b"print('hello2')\n")

            16

            >>> res.stdin.write(b"print('hello3')\n")

            16

            >>> ret = res.communicate(timeout=10)

            >>> print(ret)

            (b'hello1\nhello2\nhello3\n', b'')

                     >>> res.pid

                     5722

                     >>> res.terminate()  會成爲殭屍進程並與父進程失去聯繫  

                     root      5722  5633  0 10:19 pts/0    00:00:00 [python3] <defunct>

                     >>> res.wait()    徹底釋放掉資源

    更多點擊這裏

7、 shutil 高級文件、文件夾、壓縮包處理模塊

    shutil.copyfileobj(fsrc, fdst[, length])    將文件內容拷貝到另外一文件

           fsrc 源文件  fdst 目標文件  length 每次拷貝長度(無關緊要)

        >>> import shutil

        >>> s = open("smtp.py")

        >>> d = open("smtp_copy","w")

        >>> shutil.copyfileobj(s,d,length=20)

>>> d.close()

        [root@python ~]# cat smtp_copy

      shutil.copyfile(src, dst)  拷貝文件

        >>> import shutil

        >>> shutil.copyfile('smtp.py','smtp')

        [root@python ~]# ls smtp smtp.py 

        smtp  smtp.py

    shutil.copymode(src, dst)  僅拷貝權限。內容、組、用戶均不變

            >>> shutil.copymode('smtp.py','smtp')

        [root@python ~]# ll smtp smtp.py 

        -rw-r--r-- 1 root root 1309 Jan 25 12:02 smtp

        -rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py

           shutil.copystat(src, dst)       拷貝狀態的信息,包括:mode bits, atime, mtime, flags

            >>> shutil.copystat('smtp.py','smtp')

        [root@python ~]# ll smtp smtp.py 

        -rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp

        -rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py

           shutil.copy(src, dst)         拷貝文件和權限

            >>> shutil.copy('smtp.py','smtp_copy')

        [root@python ~]# ll smtp smtp_copy 

        -rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp

        -rw-r--r-- 1 root root 1309 Jan 25 12:19 smtp_copy

           shutil.copy2(src, dst)        拷貝文件和狀態信息

            >>> shutil.copy2('smtp.py','smtp')

            [root@python ~]# ll smtp*

        -rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp

        -rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py

    shutil.ignore_patterns(*patterns)
           shutil.copytree(src, dst, symlinks=False, ignore=None)  
  遞歸的去拷貝文件

     >>> shutil.copytree('dir1','dir2')

     [root@python ~]# ll dir1

        total 4

        drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2

        [root@python ~]# ll dir2

        total 4

        drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2

    shutil.rmtree(path[, ignore_errors[, onerror]])     遞歸的去刪除文件

     >>> shutil.rmtree('dir2')

        [root@python ~]# ll dir2

        ls: cannot access dir2: No such file or directory

    shutil.move(src, dst)                遞歸的去移動文件

     >>> shutil.move('dir1','/tmp')

        [root@python ~]# ll dir1

        ls: cannot access dir1: No such file or directory

        [root@python ~]# ll /tmp/dir1

        total 4

        drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2

    shutil.make_archive(base_name, format,...)

        建立壓縮包並返回文件路徑,例如:zip、tar

        base_name: 壓縮包的文件名,也能夠是壓縮包的路徑。只是文件名時,則保存至當前

                    目錄,不然保存至指定路徑,

                    如:www                        =>保存至當前路徑

                    如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/

        format:    壓縮包種類,「zip」, 「tar」, 「bztar」,「gztar」

        root_dir:  要壓縮的文件夾路徑(默認當前目錄)

        owner:     用戶,默認當前用戶

        group:     組,默認當前組

        logger:    用於記錄日誌,一般是logging.Logger對象

    例:

     >>> shutil.make_archive('dir1_archive',format='zip',root_dir='/root/dir1')

        [root@python ~]# ll dir1*

        -rw-r--r-- 1 root root   22 Feb 21 04:04 dir1_archive.zip






---------------------------- 接 內置模塊(三)------------------------------------

相關文章
相關標籤/搜索