一. 打印並輸出到文件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>