2016-01-12 1 views
2

Je suis en train d'obtenir une chaîne à partir d'un fichier qui a une plage de début et de fin comme ci-dessous:Python: Fractionnement d'une valeur en deux et l'attribution en deux différentes variables

"Date Range = January 1, 2001 to December 24, 2008" 

Je dois choisir cette date intervalle (du 1er janvier 2001 au 24 décembre 2008) et le diviser en deux variables différentes. Je suis capable d'aller chercher la plage de dates et de la diviser, mais lors de l'affectation, j'obtiens une erreur.

file_path = open("C:\\Users\\vinnu\\Desktop\\ARF_LS00006493_339313_Tremont.txt") 
content = file_path.read() 

#find and pick the date range 
size = len(content) 
start =0 
while start < size: 
    start = content.find("Date Range: ",start) 
    start = start if start != -1 else size 
    #fetch only till the end of line 
    end = content.find("\n", start) 
    end = end if end != -1 else size 
    date_range = (content[start+12:end]) 
    start = end + 1 
    #printing test 
    print (date_range) 

    #split 
    date1,date2= date_range.split(' to ') 
    print (date1) 
    print (date2) 

je reçois la sortie ci-dessous avec une erreur:

January 1, 2001 to December 24, 2008 
January 1, 2001 
December 24, 2008 

Traceback (most recent call last): 
    File "C:/Users/vinnu/Desktop/split_eg3.py", line 19, in <module> 
    date1,date2= date_range.split(' to ') 
ValueError: not enough values to unpack (expected 2, got 1) 
+0

Je suggère de sauvegarder la valeur de retour de scission dans une variable (sauvant ainsi la liste complète des valeurs de retour) et l'impression que pour vérifier ce que vous les valeurs obtenir. il me semble que vous n'obtenez pas 2 valeurs de retour de la fonction split, seulement 1 –

+0

C'est bizarre; Je ne peux pas reproduire votre erreur le code me va bien. Es-tu sûr qu'il n'y a pas autre chose? –

+0

Il semble que l'erreur apparaisse sur la deuxième itération de votre boucle while, donc le problème peut se trouver à un autre endroit. – Sergius

Répondre

0

Je vais essayer d'expliquer la sortie que vous obtenez

première fois dans la boucle, tout est bon ...

January 1, 2001 to December 24, 2008 
January 1, 2001 
December 24, 2008 

Maintenant, vous entrez à nouveau la boucle (vous avez probablement un peu \ n \ n dans le fichier à la fin de celui-ci)

start = content.find("Date Range: ",start) 
start = start if start != -1 else size 

départ devrait "taille" maintenant

date_range = (content[start+12:end]) # start==size remember? => "" 
start = end + 1 
#printing test 
print (date_range) #you print an empty string here! 

Après l'impression du empt y ligne

date1,date2= date_range.split(' to ') #splitting the empty string 

et explosion:

Traceback (most recent call last): 
    File "C:/Users/vinnu/Desktop/split_eg3.py", line 19, in <module> 
    date1,date2= date_range.split(' to ') 
ValueError: not enough values to unpack (expected 2, got 1) 
+0

Gosh .... l'ai maintenant ..! merci yoav galzner. et tous ceux qui ont eu le temps de m'aider ...! – Sanjivi

0

Je ne voudrais pas utiliser une boucle pour cela, vous pouvez utiliser la distribution partagée pour l'ensemble du processus:

def parseDates(s): 
    _, dates = s.split(" = ") 
    initDate, endDate = dates.split(" to ") 
    return (initDate, endDate) 

Ensuite, utilisez la fonction lors de la lecture de votre fichier:

with open("yourFileName", "r") as f: 
    for line in f.readlines(): 
     id, ed = parseDates(line) 
     print(id) 
     print(ed)