这是一个非常基础的细节问题,不过稍微不注意程序就会出现问题。事情是这样的,在Windows系统里用Python写了一个小软件。里面import os用os得到路径连接到某个具体的文件作为字符串传递,这里用了一个反斜杠“\”加上后面文件名字符串,后面代码调用的时候把它传递出去执行后续操作。测试成功,一切顺利。然后接着写其他代码。
一顿折腾后,再测试一些文件,奇怪的是,同样的代码,时而能成功运行时而运行失败。疑惑不解,还以为是环境或者文件出现了什么问题。反复检查一通,依然无果,代码要实现的功能,依然是有时候就出结果了,有时候就是丢三落四的不出结果。于是,照例,开始,如同怀疑人生意义怀疑自己。后来猪头灵光一现,突然就发现了错误。
由于反斜杠“\”是Windows系统文件目录结构使用的分隔符,所以我们在写嵌套文件夹或者文件夹内文件的时候,就需要用它来连接,不过机智客觉得天下总有这样的好巧不巧,在Python编程中,反斜杠“\”也用来转义一些特殊字符。毕竟代码字符串中呈现的不仅有要用到的看得见的普通字符,还有不一定能看得到的特殊控制字符或者还需要有转义字符本身。
所以这就有意无意成了一个“坑”——这是一个很不起眼的细节,我们这么说,一般情况下,用单反斜杠是没问题的。然而,只是一般情况,你要跟机智客一样智商和注意力一样都上不去,马马虎虎大差不差,一般当所有的话,你就可能被“坑”了。比如这次遇到的问题。如果我们用的是Windows,用到了反斜杠“\”,后面跟个文件名字符串。你写了一个反斜杠。那么亲爱的小盆友,上帝保佑你吧,遇到一般情况,你很欢乐地发现你的代码啥事没有。如果遇到二般情况,你就死翘翘了。
字符串里的单反斜杠,后面如果跟了其他字母,那就没问题。不过如果跟了n那就得斟酌了。这次就是这个情况。因为个别文件名是n开头,到了代码执行就被像女朋友一样程序误解了。就好比你经常给女朋友买礼物。而有一天买的礼物原本是送给老妈的,结果女朋友还以为是送给她的。它还以为这是一个转义字符,结果就是私自吞掉了。
当然了,正如文章开头说的,这只是一个不起眼的细节知识。在实际编程中,有大量这类的细节,项目工程稍微有点点规模,就很容易让人头大,不说别的,光字符堆积看得眼就花了。反正怎么说呢,即便是自己半个月前自己亲手敲的代码,自己都不想去看,你瞧代码这东西多让自己头大吧。