#define reader and process header
csvReader = csv.reader(tmpfile)
header = next(csvReader)
template_name_index = header.index('TemplateName')
我希望程序解析文件并查找标题' TemplateName'但我希望它能够找到标题,即使它的大写或小写。
答案 0 :(得分:1)
由于您要在字符串数组中查找字符串,因此可能需要遍历每个字符串。例如,这会在进行比较之前将字符串转换为小写:
indexes = [index for index, name in enumerate(header) if name.lower() == "templatename"]
if len(indexes) == 1:
index = indexes[0]
# There is at least one header matching "TemplateName"
# and index now points to the first header.
请注意,if
语句认为可能没有标题或多个标题与给定名称匹配。为了您的保证,请注意lower()
不会更改原始字符串的大小写。
您可能还会发现在调用index之前将标题中的所有字符串转换为小写更为明显,这看起来更像您的原始代码:
try:
index = [name.lower() for name in header].index("templatename")
except ValueError:
# There is no header matching "TemplateName"
# and you can use `pass` to just ignore the error.
else:
# There is at least one header matching "TemplateName"
# and index now points to the first header.
请注意,与之前一样,lower()
不会更改实际标头的大小写,因为它只在循环的上下文中完成。实际上,Python中的字符串是不可变的,因此您无法在适当的位置更改它们。
您也可以考虑使用正则表达式。例如,这将搜索case insensitve而不将字符串转换为小写:
import re
indexes = [index for index, name in enumerate(header) if re.match(name, "TemplateName", re.I)]
请注意,如果您真的不需要索引,那么您可以移除enumerate
并简化循环。