def get_file():
lst_Filename = []
while True:
Filename = input('\nPlease enter name of ballot file: ')
try:
read_Filename = open(Filename, 'r')
txt_Filename = read_Filename.readlines()
lst_Filename = [word.strip() for word in txt_Filename]
read_Filename.close()
return lst_Filename
except IOError:
print("The file",Filename,"does not exist.")
continue
lst_Filename = get_file()
lst2 = {}
for item in lst_Filename:
if item.index('1') == 0:
print(item)
lst_Filename的结构如下['1490 2 Mo','1267 3 Mo','2239 6 Mo','1449 7 Ks',实际文件包含列表中的数百个项目。
我正在尝试选择以“1”开头的项目。当我运行程序时,前两个项目被打印
1490 2 Mo
1267 3 Mo
然后我得到了ValueError:substring not found,它说问题是“如果item.index('1')== 0:”,我假设因为'2239 6 Mo'不以'1'开头
我不明白的是我的代码对lst_Filename中的每个项都说,如果该项(它是一个字符串)在其0索引中有子字符串'1',那么选择该项。
不是'if'选择语句,为什么程序不会跳过不以'1'开头的项目
谢谢
这个问题是.index()
在找不到请求的项目时抛出ValueError
。这就是为什么它适用于前两个项目,但当它到达一个以1
以外的东西开头的字符串时,它会转储错误并停止搜索。要做你想做的工作,你应该使用str.startswith()
。
演示:
>>> lst = ['1490 2 Mo', '1267 3 Mo', '2239 6 Mo', '1449 7 Ks']
>>> [item for item in lst if item.startswith('1')]
['1490 2 Mo', '1267 3 Mo', '1449 7 Ks']
item.index('1')引发异常,因为在字符串(https://docs.python.org/2/library/string.html#string.index)中找不到'1'。尝试使用item.find('1')代替!
item.index('1')
返回列表中找到'1'
的索引。但是,'1'
根本不在您的示例列表中。您的问题表明您“正在尝试选择以'1'
开头的项目。”与"1"
开始和等于"1"
不是一回事。您的要求本身可能存在问题,正如您所说"item,"
单数,但实际上您的列表中的三个项目都是以"1"
开头的。
如果要查找列表中以"1"
开头的所有项目,可以使用列表推导,如下所示:
[item for item in lst_Filename if item.startswith('1')]
显然,这就是诀窍:
phrase = "A man, a plan, a canal, Panama!"
portion = "Panama"
if portion.lower() in phrase.lower():
# ...
else:
# ...