免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3904 | 回复: 9
打印 上一主题 下一主题

请教关于import加载模块的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-15 19:56 |只看该作者 |倒序浏览
import os
是加载os模块;

我的python2.7,我编译安装到/usr/local/python27/
我倒/usr/local/python27/下面找,发现了os的三个文件:
/usr/local/python27/lib/python2.7/os.py
/usr/local/python27/lib/python2.7/os.pyc
/usr/local/python27/lib/python2.7/os.pyo

请问,import os加载的是哪个文件?这三个文件有什么区别?
import os后,我如何查看os模块支持的***(不好意思,我不知道下一层怎么称呼)?
或者,请指点我查什么资料能知道。
谢谢。

论坛徽章:
0
2 [报告]
发表于 2010-12-15 20:25 |只看该作者
找了点关于os模块的资料:
Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在

Linux和Windows下运行。

下面列出了一些在os模块中比较有用的部分。它们中的大多数都简单明了。

   1. os.sep 可以取代操作系统特定的路径分割符。
   2. os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
   3. os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。
   4. os.getenv()和os.putenv()函数分别用来读取和设置环境变量。
   5. os.listdir()返回指定目录下的所有文件和目录名。
   6. os.remove()函数用来删除一个文件。
   7. os.system()函数用来运行shell命令。
   8. os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。
   9. os.path.split()函数返回一个路径的目录名和文件名。
  10. os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。
  11. os.path.existe()函数用来检验给出的路径是否真地存在

os和os.path模块
os.listdir(dirname):列出dirname下的目录和文件
os.getcwd():获得当前工作目录
os.curdir:返回但前目录('.')
os.chdir(dirname):改变工作目录到dirname
os.path.isdir(name):判断name是不是一个目录,name不是目录就返回false
os.path.isfile(name):判断name是不是一个文件,不存在name也返回false
os.path.exists(name):判断是否存在文件或目录name
os.path.getsize(name):获得文件大小,如果name是目录返回0L
os.path.abspath(name):获得绝对路径
os.path.normpath(path):规范path字符串形式
os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
os.path.splitext():分离文件名与扩展名
os.path.join(path,name):连接目录与文件名或目录
os.path.basename(path):返回文件名
os.path.dirname(path):返回文件路径

论坛徽章:
0
3 [报告]
发表于 2010-12-15 20:59 |只看该作者
import 顺序
1、包
2、库
3、pyo
4、pyc
5、py
6、buildin

论坛徽章:
0
4 [报告]
发表于 2010-12-15 21:49 |只看该作者
回复 3# icyomik

非常感谢你的回复,麻烦你能以加载os模块举个例子吗?

论坛徽章:
0
5 [报告]
发表于 2010-12-16 14:07 |只看该作者
或者,模块是怎么工作的?调用了哪些函数?从哪里可以获取这些函数?
谢谢。

论坛徽章:
0
6 [报告]
发表于 2010-12-17 12:59 |只看该作者
回复 4# marsaber


    呃,怎么举例?就是一句话的问题而已,import会先检查是否有无包,再到扩展,然后。。。。

论坛徽章:
0
7 [报告]
发表于 2010-12-17 14:04 |只看该作者
回复 1# marsaber


    import 先检查.py文件 ,即模块的文件包,当 模块经import 导入成功后,将.py文件编译成字节文件.pyc,因引你应该import .py 文件

论坛徽章:
0
8 [报告]
发表于 2010-12-17 14:19 |只看该作者
本帖最后由 iamkey9 于 2010-12-17 14:23 编辑
或者,模块是怎么工作的?调用了哪些函数?从哪里可以获取这些函数?
谢谢。
marsaber 发表于 2010-12-16 14:07


    import 整个模块:
    import os
    dir(os)   #查看模块有哪些调用(子模块,如果可以这么叫的话)
    调用为
   os.xxx
    还可以用help(os) 看os模块内嵌的帮助
        

   避免import 整个模块
   from os import xxx
   调用
  xxx()

   参考:python namespace

======
  简单的理解,import 时候首先查看 path 中的路径(有多个可能路径,包含当前目录)是否包含 "模块名".pyo/pyc/py 和  "模块名"是否是含有__init_.py的目录, 是则把其导入当前命名空间中

论坛徽章:
0
9 [报告]
发表于 2010-12-17 21:43 |只看该作者
import 有一套严格的处理机制,具体机制请参考 这里,以及 这里 。这两个文档包括了 import 语句的绝大部分方面。

对于是从 py、pyc 中取资料,我个人看法是,python会先查看同一目录下几个文件,如果 pyc 的文件比 py 的旧,就会重新编译 py 文件形成 pyc ,然后从中调用相关信息,否则直接从 pyc 中调用。

对于 pyo,本人不甚熟悉,不敢乱说。

import 入某模块后,该模块哪些功能可被调用,你可以用 dir(os) 来在线查看,也可以打开该模块的源代码看,比如 os.py。如果 import 入的是一个包,比如 sqlite3 ,那你可以直接打开其 __init__.py 文件来查看。

论坛徽章:
0
10 [报告]
发表于 2010-12-20 18:49 |只看该作者
只有python -O 才会调用pyo文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP