当前位置 主页 > 服务器问题 > Linux/apache问题 >
更好的解决方案: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())