日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python import以及os模块

發布時間:2023/12/4 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python import以及os模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://jianpx.iteye.com/blog/486466

http://blog.chinaunix.net/uid-27838438-id-4087978.html

Import:

1. import 實際上是python虛擬機把當前的globals()和locals()傳進__builtins__.__import__內置函數了,所以實際上干活的是那個__import__函數!

?

2. import對命名空間的影響

1)如果是python的內置模塊,例如os模塊。這些模塊是隨著python虛擬機啟動而加載進來的,但是并沒有暴露出來。我們可以通過dir()命令查看當前命名空間

Python代碼??
  • >>>?dir()??
  • ['__builtins__',?'__doc__',?'__name__']??
  • ?可以看到,并沒有看到像os,sys等模塊。

    但是我們如果執行import sys后,那就有了。

    Python代碼??
  • >>>?import?sys??
  • >>>?dir()??
  • ['__builtins__',?'__doc__',?'__name__',?'sys']??
  • ?通過sys.modules這個字典(key: 模塊名;value: 模塊的路徑),我們可以查看模塊的信息。再通過id函數,我們可以知道兩個sys模塊是否為同一個模塊,如下:

    Python代碼??
  • >>>?id(sys)??
  • 135708788??
  • >>>?id(sys.modules['sys'])??
  • 135708788??
  • ?

    2)import只影響當前模塊的命名空間

    例如a.py里面有一句import bb,? 而bb.py里面有一句import os,那么可以這樣查看

    Python代碼??
  • >>>?import?a??
  • >>>?dir()??
  • ['__builtins__',?'__doc__',?'__name__',?'a']??
  • >>>?dir(a)??
  • ['__builtins__',?'__doc__',?'__file__',?'__name__',?'bb']??
  • >>>?dir(a.bb)??
  • ['__builtins__',?'__doc__',?'__file__',?'__name__',?'os']??
  • ?

    3. import package

    首先合法的package必須含有一個__init__.py文件,package可以包含0個或多個module(py文件)。假設aa文件夾中有test.py文件和bb文件夾,bb文件夾里面有c.py。那么當import aa.bb.c的時候,究竟對命名空間產生什么影響呢?

    Python代碼??
  • >>>?import?aa.bb.c??
  • >>>?dir()??
  • ['__builtins__',?'__doc__',?'__name__',?'aa']??
  • >>>?import?sys???
  • >>>?for?k,v?in?sys.modules.items():??
  • ...?????print?k,'\t',v??
  • ...???
  • <span?style="color:?#ff0000;">aa????<module?'aa'?from?'aa/__init__.pyc'></span>??
  • ??
  • ??
  • ??
  • copy_reg????<module?'copy_reg'?from?'/usr/local/lib/python2.5/copy_reg.pyc'>??
  • __main__????<module?'__main__'?(built-in)>??
  • site????<module?'site'?from?'/usr/local/lib/python2.5/site.pyc'>??
  • __builtin__?????<module?'__builtin__'?(built-in)>??
  • encodings???<module?'encodings'?from?'/usr/local/lib/python2.5/encodings/__init__.pyc'>??
  • encodings.encodings?????None??
  • <span?style="color:?#ff0000;">aa.bb.c???<module?'aa.bb.c'?from?'aa/bb/c.pyc'></span>??
  • ??
  • ??
  • ??
  • posixpath???<module?'posixpath'?from?'/usr/local/lib/python2.5/posixpath.pyc'>??
  • errno???<module?'errno'?(built-in)>??
  • encodings.codecs????None??
  • encodings.latin_1???<module?'encodings.latin_1'?from?'/usr/local/lib/python2.5/encodings/latin_1.pyc'>??
  • os.path?????<module?'posixpath'?from?'/usr/local/lib/python2.5/posixpath.pyc'>??
  • _codecs?????<module?'_codecs'?(built-in)>??
  • stat????<module?'stat'?from?'/usr/local/lib/python2.5/stat.pyc'>??
  • zipimport???<module?'zipimport'?(built-in)>??
  • warnings????<module?'warnings'?from?'/usr/local/lib/python2.5/warnings.pyc'>??
  • encodings.types?????None??
  • UserDict????<module?'UserDict'?from?'/usr/local/lib/python2.5/UserDict.pyc'>??
  • sys?????<module?'sys'?(built-in)>??
  • codecs??<module?'codecs'?from?'/usr/local/lib/python2.5/codecs.pyc'>??
  • readline????<module?'readline'?from?'/usr/local/lib/python2.5/lib-dynload/readline.so'>??
  • types???<module?'types'?from?'/usr/local/lib/python2.5/types.pyc'>??
  • _types??<module?'_types'?(built-in)>??
  • signal??<module?'signal'?(built-in)>??
  • linecache???<module?'linecache'?from?'/usr/local/lib/python2.5/linecache.pyc'>??
  • posix???<module?'posix'?(built-in)>??
  • encodings.aliases???<module?'encodings.aliases'?from?'/usr/local/lib/python2.5/encodings/aliases.pyc'>??
  • <span?style="color:?#ff0000;">aa.bb?????<module?'aa.bb'?from?'aa/bb/__init__.pyc'></span>??
  • ??
  • ??
  • ??
  • exceptions??<module?'exceptions'?(built-in)>??
  • os??<module?'os'?from?'/usr/local/lib/python2.5/os.pyc'>??
  • ?

    可以看到只是一句import aa.bb.c,卻把aa,aa.bb,aabb.c全部加入了當前命名空間。這種做法是為了防止重名的吧,因為如果不加前綴的話,其他包里面有重名的模塊就不能識別了!原理是python現在當前命名空間查找符號‘aa’對應的object,然后再在它的命名空間查找符號'bb',然后在bb的屬性(命名空間)里面尋找c,所以,需要把aa,bb都加載進來。不過這些都是只加載一次的,不信的話,大家可以試一下再import aa.bb.d這樣的模塊,同時預先在aa文件夾中的

    __init__.py文件中輸入print ‘hello’,hello只在第一次import aa.bb.c的時候輸出!

    ?

    4.from與import

    1)例如:from aa import bb

    Python代碼??
  • >>>?from?aa?import?bb??
  • >>>?dir()??
  • ['__builtins__',?'__doc__',?'__name__',?'bb']??
  • >>>?import?sys???
  • >>>?sys.modules['bb']??
  • Traceback?(most?recent?call?last):??
  • ??File?"<stdin>",?line?1,?in?<module>??
  • KeyError:?'bb'??
  • >>>?sys.modules['aa.bb']??
  • <module?'aa.bb'?from?'aa/bb/__init__.pyc'>??
  • >>>?bb??
  • <module?'aa.bb'?from?'aa/bb/__init__.pyc'>??
  • >>>?aa.bb??
  • Traceback?(most?recent?call?last):??
  • ??File?"<stdin>",?line?1,?in?<module>??
  • NameError:?name?'aa'?is?not?defined??
  • ?from import只是把import后面的名字引入了命名空間,讓我們可以更方便的 使用而已,但是內部實際上還是帶有模塊名的。import 。。。as。。。也是同樣的道理了。

    ?

    2)from 。。。import *

    這種形式的import是不推薦的,因為很容易污染命名空間。但是也可以了解一下。

    首先如果package中的__init__.py文件并沒有聲明__all__ 的值的話,from package import * 是沒有用的。因為python源碼中的import_from_all這個函數估計會去讀__all__的值,然后再import。

    而這種形式的import對命名空間的影響又是怎樣的呢?

    ?答案是和import aa.bb.c那種一樣的。

    os模塊:

    使用環境64位的fedora?18,python版本是python?2.7.3

    1、os.getcwd()函數

    ????功能:獲取當前目錄,python?的工作目


  • import?os
  • ??????????????????????????????????????????????????????????????????
  • pwd?=?os.getcwd()
  • ??????????????????????????????????????????????????????????????????
  • print?(pwd)

  • 2、os.name?函數


    ????功能:獲取當前使用的操作系統(獲取信息不夠詳細)

    ??????????????其中?'nt'?是?windows,'posix'?是?linux?或者?unix


  • import?os
  • ?????????????????????????????????????????????????????????????
  • name?=?os.name
  • ?????????????????????????????????????????????????????????????
  • if?name?==?'posix':
  • ?????????????????????????????????????????????????????????????????
  • ????print?("this is Linux or Unix")
  • ?????????????????????????????????????????????????????????????
  • elif?name?==?'nt':
  • ?????????????????????????????????????????????????????????????
  •   ?print?("this is windows")
  • ?????????????????????????????????????????????????????????????
  • else:
  • ?????????????????????????????????????????????????????????????
  •   ?print?("this is other system") 
  • 3、os.remove()函數


    ????功能:刪除指定文件

    ????eg:刪除?file.txt?文件

  • import?os
  • ??????????????????????????????????????????????????
  • os.remove(’file.txt‘)
  • 4、os.removedirs()函數

    ????功能:刪除指定目錄

    ????eg:刪除?file目錄


  • import?os
  • ????????????????????????????????????????????????
  • os.removedirs(‘file’)

  • 5、os.system()函數

    ????功能:運行shell命令

    ????eg:執行ls?-a?>?1.txt命令


  • import?os
  • ???????????????????????????????????????????
  • os.system(‘ls?-a?>?1.txt’)

  • 6、os.mkdir()函數

    ????功能:創建一個新目錄

    ????eg:創建一個?file?目錄


  • import?os
  • ?????????????????????????????????
  • os.mkdir(‘file’)

  • 7、os.chdir()函數

    ????功能:改變當前路徑到指定路徑

    ????eg:我現在從當前路徑到?filepath?所指定的路徑下


  • import?os
  • ??????????????????????
  • filepath?=?'/home'
  • ??????????????????????
  • pwd?=?os.getcwd()
  • ??????????????????????
  • print?(pwd)
  • ??????????????????????
  • os.chdir(filepath)
  • ??????????????????????
  • pwd?=?os.getcwd()
  • ??????????????????????
  • print?(pwd)

  • 8、os.listdir()函數

    ????功能:返回指定目錄下的所有目錄和文件

    ????eg:列出當前目錄下的所有文件和目錄


  • import?os
  • ?????????????
  • pwd?=?os.getcwd()
  • ?????????????
  • name?=?os.listdir(pwd)
  • ?????????????
  • for?filename?in?name:
  • ?????????????
  • ????print?(filename)










  • 總結

    以上是生活随笔為你收集整理的Python import以及os模块的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。