2016-06-26 71 views
3

排序大約470000個元組時出現錯誤。 我讀csv文件數據到元組ValueError:太多值來解包太多的元組

fp = open(filename, 'Ur') 
for line in fp: 
    listOfCitiesTuples.append(tuple(line.strip().split(','))) 
fp.close() 

元組的列表中有許多相關的一些城市的名字。

[('Chiredzi', '4117'), ('Gaths', '4117'), ('Masvingo', '4117'), ('Chivhu', '4120'), ('Gweru', '4120'), ('Kwekwe', '4120'), ('Mvuma', '4120'), ('Redcliffe', '4120'), ('Shurugwi', '4120'), ('Zvishavane', '4120')] 

我收集在一個列表關聯在一起,以相同數量的所有名稱並將其映射到該號碼,構成所有這些項目的字典,像這樣

{'1': ['Bombuflat', 'Garacharma', 'Port Blair', 'Rangat'], '113': ['Hydra', 'Kouba'], '294': ['Vienna', 'Wien'], '1327': ['Lambarene', 'Ndjole']} 

使用下面的方法來實現它

for k, v in listOfCitiesTuples: dictOfCitiesTuples.setdefault(v, []).append(k) 

這對(我已經測試20000到目前爲止)數量較少元組的工作得很好,但似乎並沒有工作在更大的數字,如47萬

可能大量的元組是一個問題或可能是由於損壞的文件?如果這是由於文件中某些損壞的數據造成的,那麼我能做些什麼來找出損壞的數據是什麼樣的,例外嗎?

我得到這個錯誤

File "/../view.py", line 186, in getCities 
    for k, v in listOfCitiesTuples: dictOfCitiesTuples.setdefault(v, []).append(k) 
ValueError: too many values to unpack (expected 2) 
+0

將此元組導入熊貓數據框並檢查文件中是否有損壞的數據。 – min2bro

+0

什麼是完整的錯誤?這更有可能你有1或3個值,你打開兩個。也許一個城市的名字中有一個逗號,所以你得到3個值。 –

+0

@jas這不是完整的錯誤。哪行代碼正在執行? –

回答

2

基於你的標題ValueError: too many values to unpack你有一些數據以不同的格式比您預期。

具體而言,某些行有多個逗號,這些逗號會構成一個具有多於2個值的元組,當您嘗試解壓縮它們時會導致錯誤。

在迭代文件時,可以檢查元組的長度是否正確。如果你發現數據不好,你可以記下它並修復它,或者忽略它。取決於你的需求。

with open(filename, 'Ur') as infile: 
    for line_num, line in enumerate(infile): 
     vals = tuple(line.strip().split(',')) 
     if len(vals) == 2: 
      listOfCitiesTuples.append(vals) 
     else: 
      bad_data.append((line_num, line)) 
+0

問題是一行有兩個逗號,即Putignano,1872年。感謝您找到該行的技巧 – jas

0

通過看你的代碼,並採取了猜測,什麼可能發生的是文件的最後一行可能是與什麼也沒有一個額外的行。所以line.strip().split(',')返回一個大小爲1的列表,它成爲一個大小爲1的元組,它在你的for循環中爆炸。添加後保護:

fp = open(filename, 'Ur') 
for line in fp: 
    if len(line.strip()) > 0: 
    listOfCitiesTuples.append(tuple(line.strip().split(','))) 
fp.close() 
+0

你可以問一個問題,而不必猜測。 OP要澄清他們的問題。 –

+0

@ pgreen2問題是由於數據損壞。一行導致問題 – jas

相關問題