Python 2.7中如何动态转义文件名中的斜杠/?
解决Python 2.7中动态文件名含/引发的路径错误问题
兄弟,你碰到的这个问题本质上不是转义的事儿——Linux系统根本不允许文件名里包含/字符,它是路径分隔符,系统会直接把它当成路径的一部分解析,所以才会出现./a.py/.txt这种奇怪的路径,报“不是目录”的错。
针对Python 2.7的场景,给你两个实用的解决办法:
1. 针对性替换/为合法字符
最简单直接的方式,就是在生成文件名前,把选中的字符里的/替换成下划线(或者其他你觉得合适的合法字符):
import random special_chars = "$^&%*^(&/" selected = random.choice(special_chars) # 把/替换成下划线,避免被当作路径分隔符 selected = selected.replace('/', '_') with open(__file__ + "%s.txt" % selected, 'w') as f: f.write("Hello")
这样不管随机选到哪个字符,只要是/就会被替换,不会再触发路径错误。
2. 全面过滤所有非法文件名字符
如果想更严谨,覆盖所有Linux文件名的非法字符(比如还有<>:\"\\|?*这些),可以一次性把所有非法字符都替换掉:
import random # 定义Linux下文件名不能包含的非法字符集合 invalid_filename_chars = '<>:"/\\|?*' special_chars = "$^&%*^(&/" selected = random.choice(special_chars) # 遍历替换所有非法字符为下划线 for char in invalid_filename_chars: selected = selected.replace(char, '_') with open(__file__ + "%s.txt" % selected, 'w') as f: f.write("Hello")
额外提醒:别想着转义/
这里得说清楚:Linux内核层面就禁止文件名包含/,没有任何转义方式能让它成为文件名的一部分,所以别浪费时间尝试转义了,替换才是唯一可行的路子。
内容的提问来源于stack exchange,提问作者MohitC
相关产品推荐
相关产品推荐

