[英]File name with special character “^” unrecognized by pattern.match (RegEx function)
我正在Winows 10上使用Python 3.6.5。
我无法验证目录中是否存在文件。 问题似乎来自特殊字符“ ^”。
当我运行以下代码时,os.listdir()函数会很好地列出“ WITHOUT_CIRCUMFLEX”和“ ^ WITH_CIRCUMFLEX”文件。 但是,模式“ pattern.match(文件)...”无法识别文件“ ^ WITH_CIRCUMFLEX”,即使它存在!
有人会解决这个问题吗? 谢谢你的帮助
# coding: utf-8import pandas as pd import os.path import regex path = "C:\Users\David\test" list_name = ['WITHOUT_CIRCUMFLEX', '^WITH_CIRCUMFLEX']
df_empty = pd.DataFrame()
for name in list_name: df_empty.to_pickle('{path}\{name}.pkl'.format(**locals())) pattern = 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
结尾的任何文件{name}.pkl
。 使用glob模块会更好:
import glob
for name in list_name:
...
escaped_name = glob.escape(name)
files = glob.glob('*{}.pkl'.format(escaped_name))
^
是正则表达式的元字符,因此您必须对其进行转义。 最简单的方法是使用regex.escape
函数,该函数自动转义任意字符串中的元字符。
所以代替
pattern = regex.compile('{name}.pkl'.format(**locals()))
采用
pattern = regex.compile(regex.escape('{name}.pkl').format(**locals()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.