• python之路径导入


    问题:

    最近在学习import的时候,发现不像import xxx,或者from xxx import ooo

    这样简单。比如,看下面这个图:

    要导入才能在te.py调用pre.tab.py??

    直接导入:

    import pre_tab
    Traceback (most recent call last):
      File "C:/Users/Administrator/PycharmProjects/laonanhai/shop_store/test/te.py", line 14, in <module>
        import pre_tab
    ImportError: No module named 'pre_tab'

    知识点:

      通过看视频,学到了下面两点:

    1. os.path.abspath(__file__) 返回当前文件的绝对路径
    在te.py文件下:
    import os
    x = os.path.abspath(__file__)
    print(x)
    输出:
    C:Python34python3.exe C:/Users/Administrator/PycharmProjects/laonanhai/shop_store/test/te.py
    C:UsersAdministratorPycharmProjectslaonanhaishop_store	est	e.py
    
    Process finished with exit code 0
    View Code


    2.
    os.path.dirname() 返回当前文件的上一层路径
    在te.py文件下:
    x1 = os.path.dirname(os.path.dirname(x))
    print(x1)
    sys.path.append(x1)
    
    print(sys.path

    输出:

    C:Python34python3.exe C:/Users/Administrator/PycharmProjects/laonanhai/shop_store/test/te.py
    C:UsersAdministratorPycharmProjectslaonanhaishop_store	est	e.py
    C:UsersAdministratorPycharmProjectslaonanhaishop_store
    ['C:\Users\Administrator\PycharmProjects\laonanhai\shop_store\test', 'C:\Python34\lib\site-packages\pip-8.1.2-py3.4.egg', 'C:\Users\Administrator\PycharmProjects\laonanhai', 'C:\Windows\SYSTEM32\python34.zip', 'C:\Python34\DLLs', 'C:\Python34\lib', 'C:\Python34', 'C:\Python34\lib\site-packages', 'C:\Users\Administrator\PycharmProjects\laonanhai\shop_store']
    View Code

    最后,通过print(sys.path)可以看到,
    C:UsersAdministratorPycharmProjectslaonanhaishop_store路径已经加入sys.path


    额外收获

    在pre_tab.py文件下:

    """
    C:UsersAdministratorPycharmProjectslaonanhaishop_storepre_tab.py
    """
    print("AA")
    竟然,曝错了!!!

    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 3-4: truncated UXXXXXXXX escape

    后来参考了

    http://blog.csdn.net/wlsyn/article/details/49613867原来是文件路径中,反斜杠 u 报的错,在反斜杠后面再加一个反斜杠转义了就行了,经测试,注释后的代码不报错,去掉注释,也能正常读写文件


    随笔补充:关于__import__

    obj = __import__("lib.manager")
    print(obj)    #没有导入manager.py
    #<module 'lib' from 'C:\Users\Administrator\PycharmProjects\laonanhai\day6_test\lib\__init__.py'>
    obj.order()     #AttributeError: 'module' object has no attribute 'order'
    
    obj1
    = __import__("lib.manager", fromlist=True) #表示按路径连接方式导入 print(obj1) #导入manager #<module 'lib.manager' from 'C:\Users\Administrator\PycharmProjects\laonanhai\day6_test\lib\manager.py'> obj1.order() #成功执行lib下的manager.py的order()方法
    
    
    


    出处:http://www.cnblogs.com/0zcl


    作者:前程明亮
    出处:http://www.cnblogs.com/0zcl
    文章未标明转载则为原创博客。欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

    1.非系统的学习也是在浪费时间
    2.做一个会欣赏美,懂艺术,会艺术的技术人
  • 相关阅读:
    [原译]关于源代码控制的五个误区
    [原译]AVALONDOCK 2.0入门指南第一部分
    [原译]11个高效的VS调试技巧
    【原译】一个可定制的WPF任务对话框
    [原译]YAXLib XML序列化神器
    为什么SIZEOF(STR.SUBSTR(0,3).C_STR())=8?
    C#实现GIF图片反转
    转 基于jquery ajax 用户无刷新登录详解介绍
    php中判断文件空目录是否有读写权限
    防止mysql用户root密码弱口令的攻击方法
  • 原文地址:https://www.cnblogs.com/0zcl/p/5969655.html
Copyright © 2020-2023  润新知