pprint整潔打印,處理zip壓縮文件

一. 打印並輸出到文件shell

>>> print("aa","bb","  11 ","ddddd",sep='-',end='ok/t',file=open("c:/test.txt",'w'))  
>>> print("-" *40)#打印40個"-"  
>>> print("aa","bb","  11 ","ddddd",sep='-',end='ok/t',file=open("c:/test.txt",'w'))
>>> print("-" *40)#打印40個"-"

 

 

二. 打印字典的值數組

 

複製代碼

>>> d = {"a":1,"b":2}  
>>> print('%(a)s...%(b)s' %d)    
1...2  
>>> s = ('%(a)s...%(b)s' %d)  
>>> s  
'1...2'  
>>> s = ['%(a)s...%(b)s' %d]  
>>> s  
['1...2']  
>>> print("%(__builtins__)s...%(d)s" %vars())  
<module 'builtins' (built-in)>...{'a': 1, 'b': 2}  
>>> vars()  
{'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', '__doc__': None, 'd': {'a': 1, 'b': 2}, '__package__': None}  
>>> locals()  
{'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', '__doc__': None, 'd': {'a': 1, 'b': 2}, '__package__': None}  
>>> vars() is locals() #vars()無參數的狀況等同locals()   
True  
>>> vars() == locals()  
True  
>>> a = vars()  
>>> b = locals()  
>>> a is b  
True  
>>> d = {"a":1,"b":2}
>>> print('%(a)s...%(b)s' %d)  
1...2
>>> s = ('%(a)s...%(b)s' %d)
>>> s
'1...2'
>>> s = ['%(a)s...%(b)s' %d]
>>> s
['1...2']
>>> print("%(__builtins__)s...%(d)s" %vars())
<module 'builtins' (built-in)>...{'a': 1, 'b': 2}
>>> vars()
{'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', '__doc__': None, 'd': {'a': 1, 'b': 2}, '__package__': None}
>>> locals()
{'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', '__doc__': None, 'd': {'a': 1, 'b': 2}, '__package__': None}
>>> vars() is locals() #vars()無參數的狀況等同locals()
True
>>> vars() == locals()
True
>>> a = vars()
>>> b = locals()
>>> a is b
True

複製代碼


 

三. pprint整潔打印函數

 

複製代碼

>>> import pprint  
>>> pprint.pprint(data)  
('this is a string',  
 [1, 2, 3, 4],  
 ('more tuples', 1.0, 2.3, 4.5),  
 'this is yet another string')  
>>> print(data)  
('this is a string', [1, 2, 3, 4], ('more tuples', 1.0, 2.3, 4.5), 'this is yet another string')  
>>> pp = pprint.PrettyPrinter(indent=4) #縮進4空格   
>>> pp.pprint(data)  
(   'this is a string',  
    [1, 2, 3, 4],  
    ('more tuples', 1.0, 2.3, 4.5),  
    'this is yet another string')  
>>> import pprint
>>> pprint.pprint(data)
('this is a string',
 [1, 2, 3, 4],
 ('more tuples', 1.0, 2.3, 4.5),
 'this is yet another string')
>>> print(data)
('this is a string', [1, 2, 3, 4], ('more tuples', 1.0, 2.3, 4.5), 'this is yet another string')
>>> pp = pprint.PrettyPrinter(indent=4) #縮進4空格
>>> pp.pprint(data)
(   'this is a string',
    [1, 2, 3, 4],
    ('more tuples', 1.0, 2.3, 4.5),
    'this is yet another string')

複製代碼


 

四. 打印輸出重定向性能

 

複製代碼

>>> import sys  
>>> sys.stdout = open('c:/log123.txt','w')  
>>> print ("aa","bb","1111111112213123")  
>>> sys.stdout = sys.__stdout__  
>>> import sys
>>> sys.stdout = open('c:/log123.txt','w')
>>> print ("aa","bb","1111111112213123")
>>> sys.stdout = sys.__stdout__

 
>>> import sys  
>>> t = sys.stdout  
>>> sys.stdout = open("c:/log123.txt",'w')  
>>> print('1234abcd')  
>>> sys.stdout = t  
>>> print("11")  
11  
>>>  
>>> import sys
>>> t = sys.stdout
>>> sys.stdout = open("c:/log123.txt",'w')
>>> print('1234abcd')
>>> sys.stdout = t
>>> print("11")
11
>>>

複製代碼


 

五. with方式讀取文件直到某行中止ui

讀取文件,直到某一行的文本等於"STOP"中止讀取。不然,將一直讀取下去。
(注意:中止讀取的行文本只能是iter()的第二個參數值,不能包含其餘的,空格都不行)this

 

複製代碼

with open("c:/test.txt") as fp:  
    for line in iter(fp.readline,"STOP"):  
        print(line)  
with open("c:/test.txt") as fp:
    for line in iter(fp.readline,"STOP"):
        print(line)

複製代碼


 

六. 搜索目錄樹中包含有某個字符串的文件名的全部文件列表編碼

 

複製代碼

>>> import glob  
>>> import fileinput  
>>> import os  
>>> import re  
>>> glob.glob("E:/cdr01")   
['E:/cdr01']  
>>> glob.glob("E:/cdr01/*")#只返回當前cdr01下面的子目錄名和文件名(帶路徑,但不包含目錄樹中的全部子目錄與文件)   
['E:/cdr01//20110113', 'E:/cdr01//20110114', 'E:/cdr01//20110115', 'E:/cdr01//20110116', 'E:/cdr01//20110117', 'E:/cdr01//20110118', 'E:/cdr01//20110119', 'E:/cdr01//20110120', 'E:/cdr01//20110121', 'E:/cdr01//20110122', 'E:/cdr01//20110123', 'E:/cdr01//20110124', 'E:/cdr01//cdr01.rar']  
>>> [(a,b,c) for a , b , c in os.walk("E:/cdr01")] #os.walk返回目錄樹中的全部目錄與文件,他將每一目錄的子目錄與文件都按一個元組來返回。a表明當前搜索目錄(或者子目錄),b表明當前搜索目錄下面所包含的子目錄列表,c表明當前搜索目錄下面的全部文件名列表。(不帶路徑(但能夠經過與元組第一項進行拼接爲目錄或者文件路徑),而且包含目錄樹中的全部子目錄與文件)   
[('E:/cdr01', ['20110113', '20110114', '20110115', '20110116', '20110117', '20110118', '20110119', '20110120', '20110121', '20110122', '20110123', '20110124'], ['cdr01.rar']), ('E:/cdr01//20110113', [], ['20110113_6042488744.csv']), ('E:/cdr01//20110114', [], ['20110114_6042488744.csv']), ('E:/cdr01//20110115', [], ['20110115_6042488744.csv']), ('E:/cdr01//20110116', [], ['20110116_6042488744.csv']), ('E:/cdr01//20110117', [], ['20110117_6042488744.csv']), ('E:/cdr01//20110118', [], ['20110118_6042488744.csv']), ('E:/cdr01//20110119', [], ['20110119_6042488744.csv']), ('E:/cdr01//20110120', [], ['20110120_6042488744.csv']), ('E:/cdr01//20110121', [], ['20110121_6042488744.csv']), ('E:/cdr01//20110122', [], ['20110122_6042488744.csv']), ('E:/cdr01//20110123', [], ['20110123_6042488744.csv']), ('E:/cdr01//20110124', [], ['20110124_6042488744.csv'])]  
>>> list((os.path.join(a,f)) for a , b , c in os.walk("E:/cdr201101") for f in c if re.search('6042488744',os.path.basename(f))) #E:/cdr201101包含不少CSV文件,此方法將搜索目錄樹中的文件名包含字符串"6042488744"的文件,並將文件名與路徑拼接做爲絕對路徑返回。   
['E:/cdr201101//20110113//20110113_6042488744.csv', 'E:/cdr201101//20110114//20110114_6042488744.csv', 'E:/cdr201101//20110115//20110115_6042488744.csv', 'E:/cdr201101//20110116//20110116_6042488744.csv', 'E:/cdr201101//20110117//20110117_6042488744.csv', 'E:/cdr201101//20110118//20110118_6042488744.csv', 'E:/cdr201101//20110119//20110119_6042488744.csv', 'E:/cdr201101//20110120//20110120_6042488744.csv', 'E:/cdr201101//20110121//20110121_6042488744.csv', 'E:/cdr201101//20110122//20110122_6042488744.csv', 'E:/cdr201101//20110123//20110123_6042488744.csv', 'E:/cdr201101//20110124//20110124_6042488744.csv']  
>>> import glob
>>> import fileinput
>>> import os
>>> import re
>>> glob.glob("E:/cdr01") 
['E:/cdr01']
>>> glob.glob("E:/cdr01/*")#只返回當前cdr01下面的子目錄名和文件名(帶路徑,但不包含目錄樹中的全部子目錄與文件)
['E:/cdr01//20110113', 'E:/cdr01//20110114', 'E:/cdr01//20110115', 'E:/cdr01//20110116', 'E:/cdr01//20110117', 'E:/cdr01//20110118', 'E:/cdr01//20110119', 'E:/cdr01//20110120', 'E:/cdr01//20110121', 'E:/cdr01//20110122', 'E:/cdr01//20110123', 'E:/cdr01//20110124', 'E:/cdr01//cdr01.rar']
>>> [(a,b,c) for a , b , c in os.walk("E:/cdr01")] #os.walk返回目錄樹中的全部目錄與文件,他將每一目錄的子目錄與文件都按一個元組來返回。a表明當前搜索目錄(或者子目錄),b表明當前搜索目錄下面所包含的子目錄列表,c表明當前搜索目錄下面的全部文件名列表。(不帶路徑(但能夠經過與元組第一項進行拼接爲目錄或者文件路徑),而且包含目錄樹中的全部子目錄與文件)
[('E:/cdr01', ['20110113', '20110114', '20110115', '20110116', '20110117', '20110118', '20110119', '20110120', '20110121', '20110122', '20110123', '20110124'], ['cdr01.rar']), ('E:/cdr01//20110113', [], ['20110113_6042488744.csv']), ('E:/cdr01//20110114', [], ['20110114_6042488744.csv']), ('E:/cdr01//20110115', [], ['20110115_6042488744.csv']), ('E:/cdr01//20110116', [], ['20110116_6042488744.csv']), ('E:/cdr01//20110117', [], ['20110117_6042488744.csv']), ('E:/cdr01//20110118', [], ['20110118_6042488744.csv']), ('E:/cdr01//20110119', [], ['20110119_6042488744.csv']), ('E:/cdr01//20110120', [], ['20110120_6042488744.csv']), ('E:/cdr01//20110121', [], ['20110121_6042488744.csv']), ('E:/cdr01//20110122', [], ['20110122_6042488744.csv']), ('E:/cdr01//20110123', [], ['20110123_6042488744.csv']), ('E:/cdr01//20110124', [], ['20110124_6042488744.csv'])]
>>> list((os.path.join(a,f)) for a , b , c in os.walk("E:/cdr201101") for f in c if re.search('6042488744',os.path.basename(f))) #E:/cdr201101包含不少CSV文件,此方法將搜索目錄樹中的文件名包含字符串"6042488744"的文件,並將文件名與路徑拼接做爲絕對路徑返回。
['E:/cdr201101//20110113//20110113_6042488744.csv', 'E:/cdr201101//20110114//20110114_6042488744.csv', 'E:/cdr201101//20110115//20110115_6042488744.csv', 'E:/cdr201101//20110116//20110116_6042488744.csv', 'E:/cdr201101//20110117//20110117_6042488744.csv', 'E:/cdr201101//20110118//20110118_6042488744.csv', 'E:/cdr201101//20110119//20110119_6042488744.csv', 'E:/cdr201101//20110120//20110120_6042488744.csv', 'E:/cdr201101//20110121//20110121_6042488744.csv', 'E:/cdr201101//20110122//20110122_6042488744.csv', 'E:/cdr201101//20110123//20110123_6042488744.csv', 'E:/cdr201101//20110124//20110124_6042488744.csv']

複製代碼


 

七. 字符串轉成字節數組,字節數組轉成字節串操作系統

 

複製代碼

>>> s = 'abcd123'  
>>> b = bytearray(s,sys.stdin.encoding) #sys.stdin.encoding至關於locale.getdefaultlocale()[1]得到當前操做系統的編碼方式   
>>> b  
bytearray(b'abcd123')  
>>> b = bytes(s,sys.stdin.encoding)  
>>> b  
b'abcd123'  
>>> s = 'abcd123'
>>> b = bytearray(s,sys.stdin.encoding) #sys.stdin.encoding至關於locale.getdefaultlocale()[1]得到當前操做系統的編碼方式
>>> b
bytearray(b'abcd123')
>>> b = bytes(s,sys.stdin.encoding)
>>> b
b'abcd123'

複製代碼


八. 字符串與字節的編碼與解碼code

 

複製代碼

>>> a = b'abc'  
>>> a.decode() #字節解碼爲字符串   
'abc'  
>>> b = aa.encode() #字符串編碼爲字節   
>>> b  
b'abc'  
>>>   
>>> a = b'abc'
>>> a.decode() #字節解碼爲字符串
'abc'
>>> b = aa.encode() #字符串編碼爲字節
>>> b
b'abc'
>>>

複製代碼


 

九. 處理zip壓縮文件對象

 

複製代碼

>>> import zipfile  
>>> f = zipfile.ZipFile("E:/CodeBuilder.zip","r")  
>>> for name in f.namelist():  
    data = f.read(name)  
    print(name,len(data),repr(data[:10]))  
>>> f.close()  
>>> import zipfile
>>> f = zipfile.ZipFile("E:/CodeBuilder.zip","r")
>>> for name in f.namelist():
 data = f.read(name)
 print(name,len(data),repr(data[:10]))
>>> f.close()

 
>>> import zipfile  
>>> z = zipfile.ZipFile("E:/test1.zip","w") #建立zip壓縮文件包   
>>> z.write("E:/testSqliteDB.db.txt") #壓縮一個txt文件   
>>> z.close()  
>>> z = zipfile.ZipFile("E:/test1.zip","r") #讀取zip壓縮文件包   
>>> z.extractall()#解壓到當前目錄,extract能夠具體指定解壓哪一個文件到哪一個目錄   
>>> z.extractall("E:/123/")#解壓到指定目錄   
>>> z.close()  
>>> import os  
>>> os.getcwd() #getcwd()能夠查看解壓的當前目錄位置   
'C://Python31'  
>>> import zipfile
>>> z = zipfile.ZipFile("E:/test1.zip","w") #建立zip壓縮文件包
>>> z.write("E:/testSqliteDB.db.txt") #壓縮一個txt文件
>>> z.close()
>>> z = zipfile.ZipFile("E:/test1.zip","r") #讀取zip壓縮文件包
>>> z.extractall()#解壓到當前目錄,extract能夠具體指定解壓哪一個文件到哪一個目錄
>>> z.extractall("E:/123/")#解壓到指定目錄
>>> z.close()
>>> import os
>>> os.getcwd() #getcwd()能夠查看解壓的當前目錄位置
'C://Python31'

複製代碼


 

十. glob遍歷文件夾下面的全部文件並讀取內容

 

複製代碼

>>> import fileinput  
>>> import glob  
>>> for line in fileinput.input(glob.glob("E:/TestFolder/*.txt")):  
    print("File name:" + fileinput.filename() + "   line length:" + str(len(line)))  
>>> fileinput.close()  
>>> import fileinput
>>> import glob
>>> for line in fileinput.input(glob.glob("E:/TestFolder/*.txt")):
 print("File name:" + fileinput.filename() + "   line length:" + str(len(line)))
>>> fileinput.close()

複製代碼


 

十一. shutil拷貝目錄樹

 

複製代碼

>>> import shutil  
>>> shutil.copytree("E:/TestFolder","F:/TestFolder-bak")  
>>> shutil.copytree("E:/TestFolder","xx") #在TestFolder文件夾裏面建立XX目錄,並拷貝TestFolder目錄到XX目錄  
>>> import shutil
>>> shutil.copytree("E:/TestFolder","F:/TestFolder-bak")
>>> shutil.copytree("E:/TestFolder","xx") #在TestFolder文件夾裏面建立XX目錄,並拷貝TestFolder目錄到XX目錄

複製代碼


 

十二. 得到文件大小的兩種方式(二進制讀取)

 

複製代碼

>>> import os  
>>> os.stat(f).st_size  
4753  
>>> os.path.getsize(f)  
4753  
>>> import os
>>> os.stat(f).st_size
4753
>>> os.path.getsize(f)
4753

複製代碼


 

十三. mmap 模塊提供了操做系統內存映射函數的接口,能夠映射字符串與文件內容

能夠執行譬如查找、統計、寫入等一些操做,但就是基於字節的。

 

複製代碼

>>> map = mmap.mmap(-1,13)  
>>> map.write(b"Hello world!")  
>>> map.readline()  
b'/x00'  
>>> map.seek(0)  
>>> map.readline()  
b'Hello world!/x00'  
>>> map.seek(0)  
>>> map.find(b'w')  
6  
>>> map.close()  
>>> map = mmap.mmap(-1,13)
>>> map.write(b"Hello world!")
>>> map.readline()
b'/x00'
>>> map.seek(0)
>>> map.readline()
b'Hello world!/x00'
>>> map.seek(0)
>>> map.find(b'w')
6
>>> map.close()

複製代碼


 

十四. dis反編譯對象爲字節碼

 

複製代碼

>>> import dis  
>>> def showMsg(xx):  
    print("abc")  
  
      
>>> dis.dis(showMsg)  
  2           0 LOAD_GLOBAL              0 (print)   
              3 LOAD_CONST               1 ('abc')   
              6 CALL_FUNCTION            1   
              9 POP_TOP                
             10 LOAD_CONST               0 (None)   
             13 RETURN_VALUE        
>>> import dis
>>> def showMsg(xx):
 print("abc")

 
>>> dis.dis(showMsg)
  2           0 LOAD_GLOBAL              0 (print) 
              3 LOAD_CONST               1 ('abc') 
              6 CALL_FUNCTION            1 
              9 POP_TOP              
             10 LOAD_CONST               0 (None) 
             13 RETURN_VALUE

複製代碼



十五。profile 與 cProfile分析程序執行性能

profile 模塊是標準 Python 分析器,用Python寫的。
而cProfile是用C寫的,運行起來比profile快,官方推薦用cProfile.

pstats能夠處理分析報告。

 

複製代碼

>>> import profile  
>>> def testss(n):  
    i = 0  
    for i in range(n):  
        i = i + 1  
    return i  
  
>>> profile.run("testss(1000000)")  
         5 function calls in 0.269 CPU seconds  
  
   Ordered by: standard name  
  
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)  
        1    0.000    0.000    0.266    0.266 :0(exec)  
        1    0.002    0.002    0.002    0.002 :0(setprofile)  
        1    0.266    0.266    0.266    0.266 <pyshell#3>:1(testss)   
        1    0.000    0.000    0.266    0.266 <string>:1(<module>)  
        0    0.000             0.000          profile:0(profiler)  
        1    0.000    0.000    0.269    0.269 profile:0(testss(1000000))  
  
  
>>> import cProfile  
>>> cProfile.run("testss(1000000)") #分析速度快些   
         4 function calls in 0.212 CPU seconds  
  
   Ordered by: standard name  
  
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)  
        1    0.212    0.212    0.212    0.212 <pyshell#3>:1(testss)   
        1    0.000    0.000    0.212    0.212 <string>:1(<module>)  
        1    0.000    0.000    0.212    0.212 {built-in method exec}  
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}  
>>> import profile
>>> def testss(n):
 i = 0
 for i in range(n):
  i = i + 1
 return i

>>> profile.run("testss(1000000)")
         5 function calls in 0.269 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.266    0.266 :0(exec)
        1    0.002    0.002    0.002    0.002 :0(setprofile)
        1    0.266    0.266    0.266    0.266 <pyshell#3>:1(testss)
        1    0.000    0.000    0.266    0.266 <string>:1(<module>)
        0    0.000             0.000          profile:0(profiler)
        1    0.000    0.000    0.269    0.269 profile:0(testss(1000000))


>>> import cProfile
>>> cProfile.run("testss(1000000)") #分析速度快些
         4 function calls in 0.212 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.212    0.212    0.212    0.212 <pyshell#3>:1(testss)
        1    0.000    0.000    0.212    0.212 <string>:1(<module>)
        1    0.000    0.000    0.212    0.212 {built-in method exec}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

複製代碼


 

pstats處理分析報告:

 

複製代碼

>>> import pstats  
>>> pr = profile.Profile()  
>>> pr.run("testss(1000000)")  
<profile.Profile object at 0x0143C8D0>  
>>> p = pstats.Stats(pr)  
>>> pstats = p.sort_stats("time") #按時間排序   
>>> pstats.print_stats() #打印在profile.run()中造成的分析報告   
         5 function calls in 38.856 CPU seconds  
  
   Ordered by: internal time  
  
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)  
        1   25.843   25.843   25.843   25.843 :0(setprofile)  
        1   12.760   12.760   38.856   38.856 profile:0(testss(1000000))  
        1    0.253    0.253    0.253    0.253 <pyshell#3>:1(testss)   
        1    0.000    0.000    0.253    0.253 :0(exec)  
        1    0.000    0.000    0.253    0.253 <string>:1(<module>)  
        0    0.000             0.000          profile:0(profiler)  
  
  
<pstats.Stats object at 0x0143C330>  
>>> import pstats
>>> pr = profile.Profile()
>>> pr.run("testss(1000000)")
<profile.Profile object at 0x0143C8D0>
>>> p = pstats.Stats(pr)
>>> pstats = p.sort_stats("time") #按時間排序
>>> pstats.print_stats() #打印在profile.run()中造成的分析報告
         5 function calls in 38.856 CPU seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1   25.843   25.843   25.843   25.843 :0(setprofile)
        1   12.760   12.760   38.856   38.856 profile:0(testss(1000000))
        1    0.253    0.253    0.253    0.253 <pyshell#3>:1(testss)
        1    0.000    0.000    0.253    0.253 :0(exec)
        1    0.000    0.000    0.253    0.253 <string>:1(<module>)
        0    0.000             0.000          profile:0(profiler)


<pstats.Stats object at 0x0143C330>
相關文章
相關標籤/搜索