Windows文件名非用反斜杠?Python帮你解决这个麻烦!

斜杠“/“与反斜杠“\“的使用 【代码】斜杠“/“与反斜杠“\“的使用。 阅读详情

要想让你的 Python 代码同时在 Windows 和 Mac/Linux 上工作,你需要处理不同系统文件名用不同斜杠的问题。而 Python 3 有一个名为「pathlib」的新模块,可以帮你解决这个麻烦。

Python资源共享群:484031800

在编程过程中,我们往往会遇到一个小麻烦——微软Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠:

Windows filenames:
C:\some_folder\some_file.txt
Most other operating systems:
/some_folder/some_file.txt

这是由于上世纪 80 年代早期计算机历史上的一个小意外。「MS-DOS」的第一版使用了正斜杠字符来指定命令行选项。当微软在「MS-DOS 2.0」中加入了对文件夹的支持时,正斜杠字符已经被使用了,所以他们采用了反斜杠作为替代。35 年后,我们仍然被受困于这种不一致性。

如果你想让你的 Python 代码同时在 Windows 和 Mac/Linux 上工作,你就需要处理这种与平台相关的问题。幸运的是,Python 3 有一个名为「pathlib」的新模块,使得用户处理文件几乎没有任何困难。

「pathlib」模块链接:https://docs.python.org/3/library/pathlib.html

让我们快速浏览一下处理文件名路径的不同方法,看看「pathlib」如何能让你的生活变得更美好!

错误的解决方案: 手动构建文件路径

假设你有一个数据文件夹,该文件夹包含你想要在你的 Python 程序中打开的文件:

 

 

 

 

在 Python 中对其进行编码是「错误」的方式:

data_folder = "source_data/text_files/"
file_to_open = data_folder + "raw_data.txt"
f = open(file_to_open)
print(f.read())

请注意,由于我使用的是 Mac 系统,所以我使用了「Unix」风格的正斜杠对路径进行了硬编码。这也会让 Windows 的用户感到愤怒。

从技术上讲,这段代码在 Windows 上仍然有效,因为 Python 有一个「黑客」(hack)技术:当你在 Windows 上调用「open()」函数时,它会识别这两种斜线。但即便如此,你也不应该依赖它。如果你在错误的操作系统上使用了错误类型的斜杠(尤其是在它们与外部程序或代码库交互时),并不是所有的 Python 库都会正常工作。

Python 对混合斜杠类型的支持是一种只针对 Windows 的「黑客」技术,它反过来并不起作用。在 Mac 系统环境下,在代码中使用反斜杠会导致彻底失败:

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'

由于所有这些原因以及其他原因,使用硬编码的路径字符串编写代码,是一种会让其他程序员十分「嫌弃」的做法。一般来说,你应该尽量避免这么做。

以前的解决方案: Python 的「os.path」模块

Python 的「os.path」模块有很多工具来处理这类针对特定操作系统的文件系统问题。

你可以使用「os.path.join()」为当前的操作系统构建一个使用正确类型斜杠的路径字符串:

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())

这段代码可以同时在「Windows」或「Mac」系统上完美运行。问题是它使用起来很麻烦。写出「os.path.join()」并将路径的每个部分作为独立的字符串传给该函数非常冗长,而且很不直观。

由于「os.path」模块中的大多数函数使用起来很烦人,开发者们通常会「忘记」使用它们,即使他们知道这样做更好。这导致出现了很多跨平台的 Bug,也引起了用户的愤怒。

更好的解决方案: 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())

这只是「pathlib」的好处之一。它很好地替代了过去分散在不同 Python 模块中与文件相关的许多不同功能。

小白也能快速使用Python脚本:一次性重命名大量本地文件名 Python脚本示例以下以 Python 语言为例,为你生成一个批量修改文件名的脚本示例,该脚本会在指定目录下的每个文件名前添加指定字符。假设你要添加的字符为 “new_”,请确保你已安装 Python 环境,且文件路径填写正确。代码说明导入模块:使用os模块,它提供了与操作系统交互的功能,这里用于文件操作。定义函数:rename_files函数执行主要的重命名操作。directory变量指定要操作的文件目录,需要将your_file_directory_path替换为实际的文件路径。 阅读详情

相关推荐

Python 踩坑经验 - 文件读写路径中的转义字符

最近在学习Python 文件读写时发现有时文件路径无法被识别,查询资料后发现原来是转义字符在捣鬼,导致路径无法正确解析。网上关于解决此类问题的文章有很多,但有些方法不全面,有些甚至不起作用,于是自己尝试了各种情况,并总结了自己的方法,记录在此,一来可以加深自己理解,二来也希望能帮到有同样困惑的小伙伴,Rookie 一枚,仅代表个人看法,如有错误希望大家不吝指正。谢谢~ Envir: Window 10 最初使用的打开文件方式如下(路径无法识别): withopen('C:\Python\result.

qq_42334861的博客 4597

windows系统下编辑的文本上传到Linux中去除反斜线

vim -b file.name #二进制打开文件 :%s/^M//g #注意这里使用Ctrl+V+M输入^M 如果上面的去除不行的话可以尝试使用下下面的语法命令。 :%s/\r//

爱辉弟的博客 322

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

要想让你的 Python 代码同时在 Windows 和 Mac/Linux 上工作,你需要处理不同系统文件名用不同斜杠的问题。而 Python 3 有一个名为「pathlib」的新模块,可以帮你解决这个麻烦,需要的朋友可以参考下

如何把反斜杠改成正斜杠

如果是代码中 在编程语言中,例如在Python中,可以通过字符串的替换方法。假设你有一个字符串s = "C:\\Users\\example",你可以使用s = s.replace('\\', '/')来将反斜杠替换为正斜杠。可以选择替换整个文件或者在选定的代码块内进行替换。在查找框中输入反斜杠“\”,在替换框中输入正斜杠“/”,然后点击全部替换。直接使用鼠标选中反斜杠,然后输入正斜杠进行替换。二、使用查找和替换功能(适用于较多内容)打开查找和替换功能(通常在编辑菜单中)。一、手动替换(适用于少量内容)

bgt666888的博客 525

多思计算机组成原理实验:模型机课程设计

计算机组成原理实验教程 基于多思网络虚拟实验系统 张雯雰

Nick的博客 2万+

用Python实现单层感知器:5分钟搞定逻辑与/或/异或分类(附避坑指南)

本文通过Python代码实战,详细讲解了单层感知器的核心原理与实现步骤,5分钟内即可完成逻辑与、或运算的分类任务。文章深入剖析了单层感知器的能力边界,解释了其无法解决异或(XOR)等线性不可分问题的根本原因,并提供了学习率设置、权重初始化等关键避坑指南,帮助初学者直观理解神经网络的基础。

ttt77的博客 1086

java中new File时文件名不能有斜杠

java中new File时文件名不能有斜杠

qq_41953898的博客 2005

继电保护整定值计算软件_「全套69份」整定值计算与设计方案

【全套69份】整定值计算与设计方案,输电线路、变压器、发电机、电容器、母线保护等下载方式见文末内容预览:10kV高压电机保护原理及整定计算35kV环网运行线路继电保护整定计算方案分析35KV以下继电保护及三段式电流保护整定计算110 kv电网计算机整定计算新方案220kV两相式电铁牵引站供电线路的短路故障计算及其保护整定原则分析220kV周潮线接地距离保护整定计算特殊方案750 kV变压器保护配置...

weixin_30825953的博客 5020

javaWeb学习笔记 --- tomcat

tomcat 服务器 动态web资源(如:PHP, JSP, Servlet)运行需要服务器环境 客户端发送请求到服务器,服务器调用动态web资源 Servlet容器、web容器、服务器 (接收请求并且响应) Servlet容器 java中的动态资源开发技术为Servlet/JSP,但是Servlet、JSP本身不能直接运行,需要运行他们的环境,这样的环境就叫做Servlet容器。 web容器 能够运行web应用的环境叫做web容器。Servlet容器就是web容器,但是web容器不一定是Servl

weixin_39281866的博客 277

DLL导出函数名隐藏实战:三种方法保护代码安全

在Windows软件开发中,动态链接库(DLL)的导出函数名是模块间通信的关键标识,也是逆向工程的重要突破口。理解PE文件格式中的导出表结构是掌握DLL工作原理的基础,它记录了函数地址、名称和序号的映射关系。通过隐藏或混淆这些导出名称,可以有效增加代码分析的难度,提升软件的知识产权保护和安全性。这一技术在软件保护、游戏反作弊和安全组件中具有重要价值。本文聚焦DLL导出函数名隐藏,结合Dependencies工具分析,详细解析仅序号导出、导出转发器和运行时动态修改三种实用方案,为开发者提供从原理到实践的完整指

weixin_29315091的博客 308

AIGC游戏开发:如何评估生成内容的玩家满意度?

如何量化评估生成内容对玩家体验的影响?本文聚焦AIGC生成的游戏内容(包括但不限于剧情、关卡、NPC对话、道具),系统探讨玩家满意度的评估方法论,覆盖主观与客观评估、静态与动态内容、短期与长期体验等场景。核心概念:定义AIGC与玩家满意度的关联维度;评估方法:主观(问卷/访谈)与客观(行为/生理数据)评估的技术细节;数学模型:构建多指标融合的评估模型;实战案例:以AIGC生成关卡为例,演示从数据采集到模型落地的全流程;工具资源:推荐数据采集、分析与建模的工具链;

AI天才研究院 1225

C 怎么处理windows路径_Windows文件名非用反斜杠?Python帮你解决这个麻烦!

要想让你的 Python 代码同时在 Windows 和 Mac/Linux 上工作,你需要处理不同系统文件名用不同斜杠的问题。而 Python 3 有一个名为「pathlib」的新模块,可以帮你解决这个麻烦。Python资源共享群:484031800在编程过程中,我们往往会遇到一个小麻烦——微软Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠:Wi...

weixin_39812039的博客 157

Sigrity System SI SerialLink模式进行SFP+协议仿真分析-PCB操作指导

Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1%UI RMS(平均值),即和标准值的偏差为1%UI。Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1%UI RMS(平均值),即和标准值的偏差为1%UI。Random(Rj):随机噪声,是由信号电压的随机波动引起的,默认为1mv RMS(平均值),即和标准值的偏差为1mv。

weixin_54787054的博客 508

python文件路径斜杠_Windows文件名非用反斜杠?Python小技巧帮你解决这个麻烦

在编程过程中,我们往往会遇到一个小麻烦——微软 Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠:Windows filenames:C:\some_folder\some_file.txtMost other operating systems:/some_folder/some_file.txt这是由于上世纪 80 年代早期计算机历史上的一个小意...

weixin_39997400的博客 1760

13、控制依赖与切片的新基础及递归While程序的摘要

本文探讨了控制依赖和程序切片的新研究进展,并提出了一种用于递归While程序的广义过程摘要概念和验证框架。文章介绍了控制依赖的新定义及其优势,程序切片的相关工作,以及递归While程序的过程摘要在完全正确性和终止性证明中的应用。通过阶乘和插入排序程序的示例分析,展示了过程摘要的有效性。未来的研究将聚焦于并发程序的依赖计算、依赖关系的语义连接以及时间属性的保留。

kotlin6android的博客 87

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Windows 文件名非用反斜杠?Python 小技巧帮你解决这个麻烦

(给Python开发者加星标,提升Python技能)转自:机器之心要想让你的 Python 代码同时在 Windows 和 Mac/Linux 上工作,你需要处理不同系统...

Python开发者 1475

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Windows文件名非用反斜杠?Python小技巧帮你解决这个麻烦

点击 机器学习算法与Python学习 ,选择加星标精彩内容不迷路选自medium,作者:Adam Geitgey机器之心编译在编程过程中,我们往往会遇到一个小麻烦——微软 Windows ...

机器学习算法与Python学习 616

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

http路径转file会变成反斜杠_Windows文件名非用反斜杠?Python小技巧帮你解决这个麻烦...

(点击上方公众号,可快速关注一起学Python)来自:机器之心 作者:Adam Geitgey参与:Geek AI、张倩要想让你的 Python 代码同时在 Windows 和 Mac/Linux 上工作,你需要处理不同系统文件名用不同斜杠的问题。而 Python 3 有一个名为「pathlib」的新模块,可以帮你解决这个麻烦。在编程过程中,我们往往会遇到一个小麻烦——微软 Win...

weixin_39612058的博客 566

http路径转file会变成反斜杠_Windows 文件名非用反斜杠?Python 小技巧帮你解决这个麻烦...

?“Python猫” ,一个值得加星标的公众号剧照 | 《罗小黑战记》转自:机器之心要想让你的 Python 代码同时在 Windows 和 Mac/Linux 上工作,你需要处理不同系统文件名用不同斜杠的问题。而 Python 3 有一个名为「pathlib」的新模块,可以帮你解决这个麻烦。在编程过程中,我们往往会遇到一个小麻烦——微软 Windows 系统在文件夹名之间使用反斜杠字...

weixin_39555415的博客 240

C 怎么处理windows路径_Windows文件名非用反斜杠?Python小技巧帮你解决这个麻烦...

选自medium作者:Adam Geitgey机器之心编译参与:Geek AI、张倩要想让你的 Python 代码同时在 Windows 和 Mac/Linux 上工作,你需要处理不同系统文件名用不同斜杠的问题。而 Python 3 有一个名为「pathlib」的新模块,可以帮你解决这个麻烦。在编程过程中,我们往往会遇到一个小麻烦——微软 Windows 系统在文件夹名之间使用反斜杠字符,而几乎所...

weixin_39894932的博客 144

Python 小技巧 | Windows 文件名非用反斜杠

本文转自"机器之心"在编程过程中,我们往往会遇到一个小麻烦——微软 Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠:这是...

机器学习算法与Python学习 946

斜杠与反斜杠的用法区别

每次在编写路径的时候,总是被路径中的斜杠和反斜杠所迷惑,今天特地查了一下,总结各方面的情况,介绍如下: 1.斜杠和反斜杠的通常用法 正斜杠 “ / ” (英文名:lash)表示除法,分隔。在windows系统中通常用来分隔命令行参数,/ 表示选项等。不能作为文件名。 而在unix/linux系统中,/表示目录。由于web遵循unix命名,所以在网址(URL)中,/表示目录。 反斜杠 “

ziyuzhao123的专栏 4785

python输入文件名读取文件_【已解决】Python中如何获得Windows文件完整路径中的文件名...

折腾:期间,在mac中用PyCharm调试Python程序,尝试去手动测试,当输入的是反斜杠的路径时是否可以从路径中提取出文件名代码:# get base filename# your/path/xxx.py -> xxx.py# your\path\xxx.py -> xxx.py# xxx.exe -> xxx.exe# xxx -> xxxdef ...

weixin_39854288的博客 524

Python每日一记114>>>替换不能用于文件名的字符

因为要循环一些品牌名,并将其作为工作表名字保存,但是循环到一些品牌之后就出现问题了,因为windows明明规则不能包括/\:*?"<>| 查找资料,得到结果 import re a='1/\:*?"<>|2|*?' print(re.sub(r'[\/\\\:\*\?\"\<\>\|]','', a))#只要存在特殊字符中的一个就替换为空 后期将会深入学...

教练我想学编程 450
上一篇: Python 函数声明先后顺序的问题!
下一篇: Python列表赋值拷贝,浅拷贝,深拷贝的区别!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值