zoukankan      html  css  js  c++  java
  • Python基础汇总002--Python中以绝对路径或者相对路径导入文件的方法、if __name__ == '__main__' 的正确理解

    1.Python中以绝对路径或者相对路径导入文件的方法

    绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件。
    相对路径就是以当前文件为基准进行一级级目录指向被引用的资源文件。
    以下是常用的表示当前目录和当前目录的父级目录的标识符

    ../ 表示当前文件所在的目录的上一级目录
    ./ 表示当前文件所在的目录(可以省略)
    / 表示当前站点的根目录(域名映射的硬盘目录)

    案例说明:

    python代码:

    import os
    path1=os.path.abspath('.') # 表示当前运行的py文件所处的文件夹的绝对路径
    path2=os.path.abspath('..')# 表示当前所处的文件夹上一级文件夹的绝对路径
    path3=os.path.abspath('../csvfiles/hotelreviews_after_filter_utf.csv') #指定到相应的文件路径
    print(path1)
    print(path2)
    print(path3)

    控制台输出:

    D:softwaretoolsanacondapython.exe D:/pycharmprojects/hoteltest01/hoteltest01/zhibiaotixi/01_read_pands_csv_first_200.py
    D:pycharmprojectshoteltest01hoteltest01zhibiaotixi
    D:pycharmprojectshoteltest01hoteltest01
    D:pycharmprojectshoteltest01hoteltest01csvfileshotelreviews_after_filter_utf.csv
    
    Process finished with exit code 0

    总结:

    通过总结可以发现,当你要导入的文件在和你的当前文件在同一个目录时,你直接导入这个文件名就好了。

      当你要导入的文件或者目录不和你的当前文件同目录时,你需要跳到这个你要导入文件的父级目录,然后一级一级的用点号连接走过的目录或者文件,然后就可以了 至于要怎么跳到这个这个父级目录。比较通用的就是,将父级目录加入系统路径,然后用点号一级一级的寻找,直到到达你要导入的模块。

    2.if __name__ == '__main__' 的正确理解

    对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始。同样,Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口。

    Python 则有不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口

    一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。

    举一个例子来说明一下,假设我们有一个 const.py 文件,内容如下:

    PI = 3.14
     
    def main():
        print "PI:", PI
     
    main()

    我们在这个文件里边定义了一些常量,然后又写了一个 main 函数来输出定义的常量,最后运行 main 函数就相当于对定义做一遍人工检查,看看值设置的都对不对。然后我们直接执行该文件(python const.py),输出:

    PI: 3.14

    现在,我们有一个 area.py 文件,用于计算圆的面积,该文件里边需要用到 const.py 文件中的 PI 变量,那么我们从 const.py 中把 PI 变量导入到 area.py 中:

    from const import PI
     
    def calc_round_area(radius):
        return PI * (radius ** 2)
     
    def main():
        print "round area: ", calc_round_area(2)
     
    main()

    运行 area.py,输出结果:

    PI: 3.14
    round area:  12.56
    

    可以看到,const 中的 main 函数也被运行了,实际上我们是不希望它被运行,提供 main 也只是为了对常量定义进行下测试。这时,if __name__ == '__main__' 就派上了用场。把 const.py 改一下:

    PI = 3.14
     
    def main():
        print "PI:", PI
     
    if __name__ == "__main__":
        main()

    然后再运行 area.py,输出如下:

    round area:  12.56
    

    再运行下 const.py,输出如下:

    PI: 3.14
    

    这才是我们想要的效果。

    if __name__ == '__main__' 就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__ 的值。

    总结:

    if __name__ == '__main__' 我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行

    参考文献:https://www.cnblogs.com/yaohong/p/8660209.html

  • 相关阅读:
    OutputCache 缓存key的创建 CreateOutputCachedItemKey
    Asp.net Web Api源码调试
    asp.net mvc源码分析DefaultModelBinder 自定义的普通数据类型的绑定和验证
    Asp.net web Api源码分析HttpParameterBinding
    Asp.net web Api源码分析HttpRequestMessage的创建
    asp.net mvc源码分析ActionResult篇 RazorView.RenderView
    Asp.Net MVC 项目预编译 View
    Asp.net Web.config文件读取路径你真的清楚吗?
    asp.net 动态创建TextBox控件 如何加载状态信息
    asp.net mvc源码分析BeginForm方法 和ClientValidationEnabled 属性
  • 原文地址:https://www.cnblogs.com/luckyplj/p/13246268.html
Copyright © 2011-2022 走看看