2016-01-06 89 views
0
#define reader and process header 
csvReader = csv.reader(tmpfile) 
header = next(csvReader) 
template_name_index = header.index('TemplateName') 

我想讓程序解析一個文件並查找標題'TemplateName',但我希望它能夠找到標題,即使它的大寫或小寫。搜索不區分大小寫的字符串

+4

可能重複的[如何將字符串轉換爲小寫在Python?](http://stackoverflow.com/questions/6797984/how-to-convert-string-to-lowercase-in-python) – Erica

+0

我想要它能夠找到這個值,不管它是大寫,小寫還是駝峯而不改變它。 –

+0

是的,但如果您將要搜索的字符串轉換爲小寫字母,則可以搜索「templatename」。例如。 「RanDomTeMplAteNamE」.lower()變成「randomtemplatename」 – Chris

回答

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()不會更改原始字符串的大小寫。

您也可能會發現更明顯的所有字符串轉換在頭調用索引,這看起來更像是原始的代碼之前爲小寫:

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中的字符串是不可變的,所以你不能改變它們。

您可能還會考慮正則表達式。例如,這將搜索的情況下鈍感無需轉換字符串爲小寫:

import re 
indexes = [index for index, name in enumerate(header) if re.match(name, "TemplateName", re.I)] 

需要注意的是,如果你並不真正需要的指數,那麼你就可以刪除enumerate並簡化環路一點。

+0

原諒我的無知,但我很新,並且我沒有遵循.. –

+0

我編輯我的代碼示例是更多詳細,讓我知道如果你還沒有跟着。如果有什麼具體的東西你不明白,請問。 – cr3

+0

非常感謝您的幫助。我現在要嘗試幾件事情,但我會讓你知道。 –