1

我正在尝试确定特定列中所有单元格的长度并返回超过 40 个字符的所有单元格。然后我希望该选项只知道哪些超出了限制,或者能够将单元格编辑为 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

4

1 回答 1

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

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

于 2013-07-12T20:40:17.877 回答