2016-01-12 71 views
2

我試圖從具有如下一個開始和結束日期範圍內的文件,得到一個字符串:的Python:拆分值分爲二並分配到兩個不同的變量

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

我要挑這個日期範圍(2001年1月1日至2008年12月24日),並將其分成兩個不同的變量。我能夠獲取日期範圍並將它們分開,但在分配時出現錯誤。

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) 

我得到下面的輸出和一個錯誤:

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

我建議保存在一個變量(從而節省返回值的整個列表),並打印了這一點,從分裂的返回值來檢查什麼值你得到。在我看來,就像你沒有得到從分裂功能2返回值,只有1 –

+0

這很奇怪;我無法重現你的錯誤;代碼對我來說看起來很好。你確定沒有別的東西嗎? –

+0

看起來你的while循環的第二次迭代出現錯誤,所以問題可能在另一個地方。 – Sergius

回答

0

我會盡力解釋你得到

首次在環路輸出,一切都很好...

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

現在你再次進入循環(最可能是你有一些\ n \ ñ在它的最終的文件)

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

開始應該「大小」現在

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

打印先佔後在Y線

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

和爆炸:

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 ....現在得到它..!謝謝你yoav galzner。和所有其他誰有一段時間來幫助我......! – Sanjivi

0

我不會用這一個循環,你可以使用拆分整個過程:

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

然後使用讀取文件時的功能:

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