当前位置 主页 > 服务器问题 > Linux/apache问题 >

    使用Python解决Windows文件名非用反斜杠问题(python 小技巧)(2)

    栏目:Linux/apache问题 时间:2019-11-05 00:58

    更好的解决方案:Python 3 的「pathlib」!

    为了处理文件和路径,Python 3.4 引入了一个名为「pathlib」的新标准库,而且非常好用!

    要使用该库,你只需使用正斜杠将一个路径或文件名传给一个新的「Path()」对象,然后它将处理余下的操作:

    from pathlib import Path 
    data_folder = Path("source_data/text_files/") 
    file_to_open = data_folder / "raw_data.txt" 
    f = open(file_to_open) 
    print(f.read()) 

    在这里,有两点需要注意:

     你应该在使用「pathlib」函数的情况下使用正斜杠。「Path()」函数将会把正斜杠转化为适应当前操作系统环境的正确斜杠。赞!  如果你想要在路径上进行添加,你可以直接在你的代码中使用「/」操作符。你再也不用一遍又一遍地输入「os.path.join(a, b)」了。

    如果「pathlib」所做的就这么多,它也已经是对于 Python 的一个很好的补充了。但是,它还能做更多!

    例如,我们可以在无需打开和关闭文件的情况下,读取文本文件的内容:

    from pathlib import Path 
    data_folder = Path("source_data/text_files/") 
    file_to_open = data_folder / "raw_data.txt" 
    print(file_to_open.read_text()) 

    专业提示:之前的示例是有 Bug 的,因为打开的文件从来没有被关闭过。而这里的这种语法则彻底避免了这个 Bug。

    事实上,「pathlib」使大多数标准的文件操作变得快速而简单:

    from pathlib import Path 
    filename = Path("source_data/text_files/raw_data.txt") 
    print(filename.name) 
    # prints "raw_data.txt" 
    print(filename.suffix) 
    # prints "txt" 
    print(filename.stem) 
    # prints "raw_data" 
    if not filename.exists(): 
     print("Oops, file doesn't exist!") 
    else: 
     print("Yay, the file exists!") 

      

    你甚至可以使用「pathlib」显式地将一个「Unix」路径转化为一个「Windows」格式的路径:

    from pathlib import Path, PureWindowsPath 
    filename = Path("source_data/text_files/raw_data.txt") 
    # Convert path to Windows format 
    path_on_windows = PureWindowsPath(filename) 
    print(path_on_windows) 
    # prints "source_data\text_files\raw_data.txt" 
    
    

    如果你真的想安全地在你的代码中使用反斜杠,你可以按照「Windows」格式声明你的路径,而「pathlib」可以对其进行转化,使其能在当前的操作系统中工作:

    from pathlib import Path, PureWindowsPath 
    # I've explicitly declared my path as being in Windows format, so I can use forward slashes in it. 
    filename = PureWindowsPath("source_data\\text_files\\raw_data.txt") 
    # Convert path to the right format for the current operating system 
    correct_path = Path(filename) 
    print(correct_path) 
    # prints "source_data/text_files/raw_data.txt" on Mac and Linux 
    # prints "source_data\text_files\raw_data.txt" on Windows 
    

    如果你想把代码写得更「高级」一些,你甚至可以使用「pathlib」来做诸如解析相对路径、解析网络共享路径并生成

    「file:// urls」之类的事。在下面的例子中,我们将仅仅使用两行代码,在你的 web 浏览器中打开一个本地文件夹:

    from pathlib import Path 
    import webbrowser 
    filename = Path("source_data/text_files/raw_data.txt") 
    webbrowser.open(filename.absolute().as_uri())