2013-07-12 111 views
1

我想確定特定列中所有單元格的長度,並返回所有單元格超過40個字符。然後我想讓情緒知道哪些超出了限制,或者能夠將單元格編輯爲不超過40個字符並將它們插回原始位置。如何確定列中的csv字段的長度並返回一定長度

這是該文件的一個例子,我有:

Name,Geo Location,Default 
DRE EXT Pair Video,, 
DRE United Kingdom EXT LON Extrane lo.EXT RD01,United Kingdom, 
DRE United Kingdom EXT LON Extrane lo.EXT RD02,United Kingdom, 
DRE United Kingdom LON lab dyna test,United Kingdom, 
DRE United StatesCPT Corp Point Link_Pair Video,United States, 
DRE United Kingdom SDD SASD-D TRAIL01 to RD01,United Kingdom, 
DRE United Kingdom SDD SASD-D TRAIL01 to RD02,United Kingdom, 
DRE United Kingdom SDD SASD-D TRAIL02 to RD01,United Kingdom, 
DRE United Kingdom SDD SASD-D TRAIL02 to RD02,United Kingdom, 
DRE United Kingdom SDD SASD-D TRAIL01 to TRAIL02,United Kingdom, 
DRE United Kingdom SDD SASD-D RD01 to RD02,United Kingdom, 
DRE United States MDR SASD-D XC Xplay to,United States, 
DRE Hong Kong (China) Hongkong HKOuter RD01 HKInter,"Hong Kong, Hong Kong", 
DRE United Kingdom LON Sq lab dynam test,United Kingdom, 
DRE United States USTHA SPS Thalberg usthamd mdf01,United States, 
DRE Hong Kong (China)DRE SASD-D Citi EXT,Hong Kong, 
SASD-D United States USPHXCAP VRF RD02,United States, 

我要檢查在名稱列中的所有領域,看看他們是40個字符或更長的時間,就像我上面說的,有選項來查看它們或編輯它們並將它們插回到文件中。

我很難包圍如何完成這一任務。如果我至少可以打印40個或更多字符的字段,這將是一個很好的起點。

下面的代碼是什麼,我不得不開始:

import csv 
import collections 

lthlst=[] 

with open('file1.csv','rb') as f: 
    r = csv.reader(f) 
    od = collections.OrderedDict(r) 

    for line1 in od: 
     lng=len(line1[1]) 
     lthlst.append(lng) 
     for i in lthlst: 
      if i >= 40: 

print lthlst 

我從這個ValueError: too many values to unpack得到一個錯誤。

任何與此有關的幫助表示讚賞。

感謝,

B0T

+0

因此修復error - * view *由異常消息/ trace所指示的行,然後解釋爲什麼會生成該行。然後研究實際問題。像這樣的錯誤不是一項任務,也不是一個問題。只是代碼的一個錯誤。 – user2246674

+0

@StevenRumbalski謝謝,我會玩弄你的建議。我只想將其輸出到一個文件,然後能夠手動編輯該文件,並在原始行/行處輸入我更改爲原始文件的內容(如果有意義的話)。 – CircuitB0T

+0

@ user2246674它是代碼中的'od = collections.OrderedDict(r)'行。我確實看過你的意思,但沒有其他的例子與我的代碼有所不同。 – CircuitB0T

回答

1

的OrderedDict構造它需要在鍵/值的列表。這不是什麼在這裏 - r是三聯隊列表,由於線後的逗號 - 因此是例外。

第一正常化它:現在

r = csv.reader(f) 
list_of_pairs = [ (i[0], i[1]) for i in r ] # ensure only pairs .. 
od = collections.OrderedDict(list_of_pairs) # .. to not break this 

,你可以回到真正的問題!請記住,要關注特定的問題 - 我已經在上面找到了這個問題 - 因爲這個主要帖子/問題對於任務過於籠統,與此編碼錯誤無關。

+0

謝謝,我會試試這個。 – CircuitB0T

+0

這實際上不適用於我的具體問題。事實證明,我需要實際編號的行。 – CircuitB0T