學習用Python來編寫系統代碼在很大程度上就是學習Python的系統模塊。目前有多種方式可獲取這些模塊的屬性說明和參考手冊。python
獲取模塊的屬性列表:linux
[root@localhost ~]# python3 Python 3.6.1 (default, Jul 12 2017, 09:58:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> dir(sys) ['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe', '_git', '_home', '_xoptions', 'abiflags', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions']
dir函數會簡單地返回一個列表,其中包含了帶屬性對象的全部屬性的字符串名稱。這是一種在交互提示符下喚醒對模塊的記憶的便捷方式。git
>>> sys.version '3.6.1 (default, Jul 12 2017, 09:58:07) \n[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]' >>> sys.__doc__ "This module provides access to some objects used or maintained by the\ninterpreter and to functions that interact strongly with the interpreter.\n\nDynamic objects:\n\nargv -- command line arguments; argv[0] is the script pathname if known\npath -- module search path;
## 此處省略多行
使用print函數能夠將換行符 \n 進行換行顯示出來:api
>>> print(sys.__doc__) This module provides access to some objects used or maintained by the interpreter and to functions that interact strongly with the interpreter. Dynamic objects: argv -- command line arguments; argv[0] is the script pathname if known path -- module search path; path[0] is the script directory, else '' modules -- dictionary of loaded modules displayhook -- called to show results in an interactive session excepthook -- called to handle any uncaught exception other than SystemExit To customize printing in an interactive session or to install a custom top-level exception handler, assign other functions to replace these.
### 省略多行
因爲print 自己並不完成頁面滾動或分頁顯示,所以還能夠使用help函數:session
>>> help(sys) Help on built-in module sys: NAME sys MODULE REFERENCE https://docs.python.org/3.6/library/sys The following documentation is automatically generated from the Python source files. It may be incomplete, incorrect or include features that are considered implementation detail and may vary between Python implementations. When in doubt, consult the module reference at the location listed above.
### 省略多行
help函數是PyDoc系統提供的接口之一。PyDoc系統是Python自帶的標準庫代碼,可將對象相關的文檔(文檔字符串和結構信息等)呈現爲格式化後的形式。app
find 函數返回子字符串第一個匹配所在的偏移位置,replace 函數則完成全局搜索與替換。和全部字符串操做同樣,replace 函數返回的是新字符串,而不是改變既有字符串。async
>>> mystr = 'xxxSPAMxxx' >>> mystr.find('SPAM') # 返回首個匹配的位置偏移 3 >>> mystr = 'xxaaxxaa' >>> mystr.replace('aa', 'SPAM') # 全局替換 'xxSPAMxxSPAM'
>>> mystr = 'xxxSPAMxxx' >>> 'SPAM' in mystr # 子字符串搜索/測試 True >>> 'Ni' in mystr # 沒找到時 False >>> mystr.find('Ni') -1
>>> mystr = '\t Ni\n' >>> mystr.find('Ni') 2 >>> mystr.strip() # 取出空白分隔符 'Ni' >>> mystr.rstrip() # 同上,只不過在右側進行 '\t Ni'
字符串方法:ide
>>> mystr = 'SHRUBBERY' >>> mystr.lower() # 大小寫轉換 'shrubbery' >>> mystr.isdigit() # 內容測試 False >>> mystr.isalpha() True >>> import string # 環境預設: 可在 ‘in’ 等語句中使用 >>> string.ascii_lowercase 'abcdefghijklmnopqrstuvwxyz' >>> string.whitespace # 空白分隔符 ' \t\n\r\x0b\x0c'
用字符串做爲分隔符來分割原始字符串,也能夠用子字符串將它們鏈接起來:函數
>>> mystr = 'aaa,bbb,ccc' >>> mystr.split(',') # 分割爲子字符串組成的列表 ['aaa', 'bbb', 'ccc'] >>> mystr = 'a b\nc\nd' >>> mystr.split() # 默認分隔符: 空格 ['a', 'b', 'c', 'd'] >>> delim = 'NI' >>> delim.join(['aaa', 'bbb', 'ccc']) # 鏈接子字符串列表 'aaaNIbbbNIccc' >>> ' '.join(['A', 'dead', 'parrot']) # 在期間添加空格符 'A dead parrot' >>> '-'.join(['A', 'dead', 'parrot']) # 在期間添加 - 'A-dead-parrot' >>> chars = list('Lorreta') # 轉換爲字符組成的列表 >>> chars ['L', 'o', 'r', 'r', 'e', 't', 'a'] >>> chars.append('!') >>> ''.join(chars) # 生成爲字符串: 分隔符爲空 'Lorreta!'
實際上,咱們能夠組合split 和join 來模擬前面介紹的replace 函數:學習
>>> mystr = 'xxaaxxaa' >>> 'SPAM'.join(mystr.split('aa')) 'xxSPAMxxSPAM' >>> mystr.split('aa') ['xx', 'xx', '']
另外 Python 不會自動將字符串轉換爲數字:
>>> int("42"), eval("42") # 字符串轉換爲整型 (42, 42) >>> str(42), repr(42) # 整型轉換爲字符串 ('42', '42') >>> ("%d" % 42), '{:d}'.format(42) # 分別藉助格式化表達式和方法 ('42', '42') >>> "42" + str(1), int("42") + 1 # 分別爲鏈接和加法 ('421', 43)
open函數,打開命令行中給出的外部文件,並藉助文件對象的read 方法將文件的文本一次性讀入內存。
文件內容加載爲字符串;
固定大小的字節集合加載爲字符串;
文件的內容加載爲單行字符串組成的列表;
文件的下一行加載爲字符串。
open('file').read() # 將整個文件讀取爲字符串 open('file').read(N) # 將後面N個字節讀取爲字符串 open('file').readlines() # 將整個文件讀取爲單行字符串組成的列表 open('file').readline() # 跨過 '\n' 讀取下一行
簡單文件讀寫:
>>> file = open('spam.txt','w') # 建立文件 spam.txt >>> file.write(('spam' * 5) + '\n') # 寫入文本:返回所寫入的#個字符 21 >>> file.close() >>> file = open('spam.txt') # 或者用open('spam.txt').read() >>> text = file.read() # 讀取爲字符串 >>> text 'spamspamspamspamspam\n'
回憶一下,Python每一個模塊都有一個內置的__name__變量,當且僅當文件做爲程序運行時,而不是做爲庫導入時,Python會將這個變量設爲__mian__字符串。所以,當這個腳本代碼做爲頂層程序運行時,下面的if 判斷將爲真,但在其餘地方被導入時則爲假:
if __name__ == '__main__': # ...代碼執行入口...