解决Python在Linux环境、Mac环境或Windows环境下,文件路径不同的问题

参考资料

本文参考:Python 3 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux

实验环境

  • Python 3.6.5
  • pathlib 11.1
    文档

问题背景

操作系统,文件的路径也是不同的:

1
2
3
4
5
Windows的文件路径:
C:\some_folder\some_file.txt

很过其它操作系统的文件:
/some_folder/some_file.txt

这其实是从上个世纪80年代,从MS-DOS系统遗留下来的疑难杂症。

这就造成一个问题,如果包含文件路径的Python代码是在Linux上测试的,那Windows下面可能就没法用了。

还好,可以用一个叫做 pathlib 的库来解决。

解决方案

安装pathlib

1
pip install pathlib

让路径兼容

假如你的python代码写在my_program.py里,你要定位到下面这个叫raw_data.txt的文件:

你可以这样写:

1
2
3
4
5
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())

或者你可以直接写绝对路径:

1
2
from pathlib import Path
filename = Path("source_data/text_files/raw_data.txt")

它甚至可以直接取文件名,扩展名,判断文件是否存在:

1
2
3
4
5
6
7
8
9
10
11
12
13
from pathlib import Path

filename = Path("source_data/text_files/raw_data.txt")
print(filename.name)
# 输出全部文件名:"raw_data.txt"
print(filename.suffix)
# 输出文件扩展名:"txt"
print(filename.stem)
# 输出文件名:"raw_data"
if not filename.exists():
print("奥普斯,文件不存在!")
else:
print("耶,文件存在!")

可以返回Windows格式的路径:

1
2
3
4
5
6
from pathlib import Path, PureWindowsPath
filename = Path("source_data/text_files/raw_data.txt")
# 转换为 Windows 格式
path_on_windows = PureWindowsPath(filename)
print(path_on_windows)
# 输出: "source_data\text_files\raw_data.txt"

便利文件夹里的全部json文件:

1
2
for file in Path("dir/dir/").glob('*.json'):
open(file)