2015-10-08 22 views
0

我想使用字典將值列表分隔爲鍵和值。該列表如果格式如下:爲什麼我會在python中使用split()方法獲取值錯誤?

packagename=version_number 
packagename2=version_number2 
etc... 

有時版本號有特殊字符,但從來沒有等號。

dict = {} 
with open('file.rtf') as f: 
    for line in f.readlines(): 
     pkg,ver = line.split('=') 
     dict[pkg] = ver 

print("%s: %s" % (dict[pkg], dict[ver]))  

當我運行代碼時,出現以下錯誤:「ValueError:需要多個值才能解包」,我不知道爲什麼。我已經嘗試修改.rtf文件,將等號兩邊的值用空格分開,以防有所作爲。

UPDATE

使用.rtf文件確實是問題,因爲由@tdelaney和其他人指出。轉換爲純文本後,代碼現在可以順利運行。感謝您的幫助,夥計們。

+0

什麼是空白行,特別是在文件的末尾。基本調試是在拆分前打印行,並查看哪一行不符合您的期望。 – tdelaney

+0

我不知道,我會給這個鏡頭... – jalyper

+0

在普通的文本編輯器(例如vim或emacs)中打開文件,看看它是如何 - 如果它是真正的RTF - 不僅僅是格式化爲「key =值「... – haavee

回答

3

你的輸入文件是RTF格式,這意味着它包含這樣的格式代碼(即使它不包含任何格式):

{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard 
packagename=version_number\par 
} 

這不是你的程序期待的輸入,和你」重新可能得到第一行的錯誤,其中不包含=,因此會分裂爲一個值,從而導致錯誤。

嘗試轉換爲txt,或編寫代碼來處理RTF。

+0

OP可能能夠使用pyth庫(https://pypi.python.org/pypi/pyth)從RTF文件中提取純文本。 – haavee

+0

@haavee:趕上! – Linuxios

相關問題