01
引言
大家好,我是AI算法之道!
Python是我最喜欢的编程语言之一,它向来以其简单性、多功能性和可读性而闻名。
在Python编程中的一个小麻烦是,微软的windows在文件夹名称之间使用反斜杠字符,而几乎所有其他操作系统都使用正斜杠:
Windows filenames:
C:\some_folder\some_file.txt
Most other operating systems:
/some_folder/some_file.txt
这是 20 世纪 80 年代初计算机历史上的一个意外。MS-DOS 的第一个版本使用正斜杠字符来指定命令行选项。当微软在 MS-DOS 2.0 中添加对文件夹的支持时,正斜线字符已经被使用,因此他们使用了反斜线字符。35 年后的今天,我们仍然无法摆脱这种不兼容性。
在本文中,我们将深入探讨Python中处理文件路径的小技巧,希望可以帮助到大家!
02
手工拼接文件路径
以下是在 Python中不推荐的手工路径拼接方式:
data_folder = "source_data/text_files/"
file_to_open = data_folder + "raw_data.txt"
f = open(file_to_open)
print(f.read())
从技术上讲,这段代码仍然可以在 Windows 上运行,因为 Python 有一个黑客技术,当你在 Windows 上调用 open()函数时,它可以识别任何一种斜线。但即便如此,您也不应该依赖它。如果您在错误的操作系统上使用了错误的斜线,并非所有 Python 库都能工作,尤其是当它们与外部程序或库连接时。
data_folder = "source_data\\text_files\\"
file_to_open = data_folder + "raw_data.txt"
f = open(file_to_open)
print(f.read())
# On a Mac, this code will throw an exception:
# FileNotFoundError: [Errno 2] No such file or directory: 'source_data\\text_files\\raw_data.txt'
03
使用os.path模块
import os.path
data_folder = os.path.join("source_data", "text_files")
file_to_open = os.path.join(data_folder, "raw_data.txt")
f = open(file_to_open)
print(f.read())
04
使用Python3中的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 的一个很好的补充,但它的功能远不止这些!我们在下一节进行讲解。
05
Pathlib其他功能
我们可以利用pathlib来直接读取文本文件的内容,而无需显示打开和关闭文件:
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())
事实上,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 的一小部分。它很好地替代了过去分散在不同 Python 模块中的大量与文件操作相关的功能。推荐大家可以多多接触pathlib库中关于路径处理的小技巧。
06
总结
本文重点介绍了python中如何利用不同方法实现不同操作系统下文件路径的兼容性处理技巧,希望这些小技巧可以帮助到大家,提升大家的工作效率!
您学废了吗?
点击上方小卡片关注我
添加个人微信,进专属粉丝群!