python - 带有特殊字符“^”的文件名无法被 pattern.match 识别(RegEx 函数)
问题描述
我在 Winows 10 上使用 Python 3.6.5。
我无法验证目录中是否存在文件。问题似乎来自特殊字符“^”。
当我运行下面的代码时,os.listdir () 函数很好地列出了“WITHOUT_CIRCUMFLEX”和“^WITH_CIRCUMFLEX”文件。但是,文件“^ WITH_CIRCUMFLEX”不能被函数pattern.match(文件)识别......虽然它存在!
有人有解决这个问题的想法吗?谢谢你的帮助
# 编码:utf-8将熊猫导入为 pd 导入 os.path 导入正则表达式 路径 = "C:\Users\David\test" list_name = ['WITHOUT_CIRCUMFLEX', '^WITH_CIRCUMFLEX']
df_empty = pd.DataFrame()
对于 list_name 中的名称: df_empty.to_pickle('{path}\{name}.pkl'.format(**locals())) 模式 = regex.compile('{name}.pkl'.format(**locals()))
# Check if file already exist check = False for file in os.listdir(path): print("I found this file\t" + file) if pattern.match(file): check = True if check is True: print("\t" + name + " file exist" + "\n") else: print("\t" + name + " does not exist")
解决方案
^
是一个正则表达式元字符,因此它不会匹配文本中的文字^
字符。您需要转义这些字符:
'\^WITH_CIRCUMFLEX'
如果您的输入是从其他来源生成或获取的,请使用该regex.escape()
函数为您转义元字符:
for name in list_name:
df_empty.to_pickle('{path}\{name}.pkl'.format(**locals()))
name = regex.escape(name, special_only=True)
pattern = regex.compile('{name}.pkl'.format(**locals()))
但是,如果您正在寻找匹配文件,那么您目前没有使用任何使用正则表达式的原因。您的模式最多可以匹配任何以 . 结尾的文件名{name}.pkl
。使用glob 模块会更好:
import glob
for name in list_name:
...
escaped_name = glob.escape(name)
files = glob.glob('*{}.pkl'.format(escaped_name))
推荐阅读
- excel - Python3.x:TypeError:预期的 str、bytes 或 os.PathLike 对象,而不是列表
- python - 在 powershell 中使用 python manage.py migrate 命令时,我收到以下错误消息
- css - 离子如何在图像旁边添加按钮
- python - python sum(list) 和 reduce(lambda x, y : x+y, list) 之间的差异?
- javascript - Vue.js,Express Server,Okta,部署到 Heroku,隐式/回调 404
- jquery - 填充所有行但显示“1 个条目中的 1 个”的数据表
- ssl - 子域的 SSL 证书
- android - 序列化时数据占用不能超过10240KB [android-workmanager]
- javascript - 如何将道具映射到对象值 React Big Calendar
- assembly - 如何在 armv8/aarch64/arm64 的汇编中存储来自五个寄存器的多个 5 元素结构?