ValueError: sous-chaîne n'est pas trouvé, Ce que je fais mal?
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)
La lst_Filename est structuré comme suivre ['1490 2 Mo', '1267 3 Mo', '2239 6 Mo', '1449 7 Ks'], le fichier contient des centaines d'articles dans la liste.
Je suis en train de sélectionner l'élément qui commence par "1". Quand je lance le programme, les deux premiers éléments est imprimé
1490 2 Mo
1267 3 Mo
puis-je obtenir la ValueError: sous-chaîne n'est pas trouvé, il dit que le problème est à la ligne "si l'objet.index('1') == 0:", je suppose parce que "2239 6 Mo' ne commence pas par '1'
Ce que je ne comprends pas, c'est que mes codes dit pour chaque élément de la lst_Filename, si l'article(qui est une chaîne) est la sous-chaîne '1' dans son index 0, puis sélectionnez l'élément.
N'est pas le "si", une instruction de sélection, pourquoi ne pas le programme saute à travers des articles qui ne commence pas par '1'
Grâce
OriginalL'auteur user3454234 | 2014-03-30
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que
.index()
jetteValueError
quand il ne trouve pas l'élément demandé. C'est pourquoi il travaille pour les deux premiers points, mais lorsqu'il atteint une chaîne qui commence avec quelque chose d'autre que1
, il déverse une erreur et arrête la recherche. Pour faire ce que vous voulez faire le travail, vous devez utiliserstr.startswith()
.Démo:
OriginalL'auteur Alex Thornton
élément.index('1') est le déclenchement d'une exception, parce que '1' n'est pas trouvé dans la chaîne (https://docs.python.org/2/library/string.html#string.index). Essayez d'utiliser l'élément.find('1') à la place!
Il sera de retour -1, mais de ne pas soulever d'exception.
OriginalL'auteur Tamas
item.index('1')
retourne l'indice dans votre liste, où'1'
est trouvé. Cependant,'1'
n'est pas dans votre liste. Votre question précise que vous êtes "en essayant de sélectionner l'élément qui commence par'1'
." Commence avec"1"
et est égal à"1"
ne sont pas la même chose. Votre exigence est elle-même potentiellement problématiques, comme vous le dites"item,"
singulier, mais en fait, trois éléments dans votre liste de commencer avec"1"
.Si vous voulez trouver tous les éléments dans une liste qui commencent par
"1"
, vous pouvez utiliser une compréhension de liste, comme suit:OriginalL'auteur khagler