我是一个python初学者,遇到了一个简单的问题:我有一个名称(指示符)列表,然后有一个非常简单的代码,它读取csv文件中的行,并打印第一列(第[0]行)中具有名称的csv行,这与我的“指示符列表”相同。所以:
import csv
DesignatorList = ["AAX-435", "AAX-961", "HHX-9387", "HHX-58", "K-58", "K-14", "K-78524"]
with open('DesignatorFile.csv','rb') as FileReader:
for row in csv.reader(FileReader, delimiter=';'):
if row[0] in DesignatorList:
print row
我的csv文件只是一个名称列表,如下所示:
^{pr2}$我希望能够使用通配符,如*和.,例如:假设我把这个放在我的csv文件中:
AAX*
H.X-9387
*58
我需要我的代码能够解释这些通配符/控制字符,并打印以下内容:
谢谢你!在
编辑:为了将来参考(万一有人遇到同样的问题),我是按照Roman的建议解决问题的:
import csv
import re
DesignatorList = ["AAX-435", "AAX-961", "HHX-9387", "HHX-58", "K-58", "K-14", "K-78524"]
with open('DesignatorFile.txt','rb') as FileReader:
for row in csv.reader(FileReader, delimiter=';'):
designator_col0 = row[0]
designator_col0_re = re.compile("^" + ".*".join(re.escape(i) for i in designator_col0.split("*")) + "$")
for d in DesignatorList:
if designator_col0_re.match(d):
print d
试试re module。在
您可能需要准备正则表达式(regex)以供使用,方法是将“*”替换为“.*”,并在正则表达式的开头和结尾添加^(字符串开头)和$(字符串结尾)。此外,您可能需要通过重新逃逸函数(即,函数从模块re中转义)。在
如果您没有任何其他“控制字符”(如您所称),请在应用escape后用“*”分隔字符串,并用“.*”连接。在
例如
然后你可以匹配(我猜,你的规则是row):
^{pr2}$(我了解到,规则来自CSV文件,而指示符来自列表。相反的方法很容易做到)。在
上面的例子就是例子。你仍然需要把它们调整到你的程序中。在
Python的string对象有一个
startswith
和一个endswith
方法,如果只有少量的规则,可以在这里使用它们。由于您似乎有相当简单的模式,因此最常用的方法是regular expressions。这样你就可以把这些规则编码成模式。在相关问题 更多 >
编程相关推荐