如何确定列中csv字段的长度并返回一定长度

时间:2013-07-12 19:54:42

标签: python python-2.7

我正在尝试确定特定列中所有单元格的长度,并返回超过40个字符的所有单元格。然后,我想让otion知道哪些超出限制,或者能够将单元格编辑为40个以下的字符并将它们插回到原始位置。

这是我的文件示例:

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

1 个答案:

答案 0 :(得分:1)

OrderedDict构造函数,它接受键/值的列表。这不是r中的内容 - 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

现在,您可以回到真正的问题!请记住,要关注特定的问题 - 我已经在上面确定了 - 因为这个主要帖子/问题对于任务来说过于笼统,与此编码错误无关。