用零替换空csv列值

时间:2010-05-19 03:43:21

标签: python csv list

所以我正在处理一个缺少值的csv文件。 我希望我的脚本是:

#!/usr/bin/python

import csv
import sys

#1. Place each record of a file in a list.
#2. Iterate thru each element of the list and get its length.
#3. If the length is less than one replace with value x.


reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
    for x in row[:]:
                if len(x)< 1:
                         x = 0
                print x
print row

这是一个数据示例,我试一试,理想情况下它应该适用于任何列长度

Before:
actnum,col2,col4
xxxxx ,    ,
xxxxx , 845   ,
xxxxx ,    ,545

After
actnum,col2,col4
xxxxx , 0  , 0
xxxxx , 845, 0
xxxxx , 0  ,545

任何指导都将不胜感激

更新这是我现在所拥有的(谢谢):

reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
    for i, x in enumerate(row):
                if len(x)< 1:
                         x = row[i] = 0
print row

然而,它似乎只放了一条记录,我将把输出管道输出到命令行上的新文件。

更新3:好了,现在我遇到了相反的问题,我正在输出每条记录的副本。 为什么会这样?

After
actnum,col2,col4
actnum,col2,col4
xxxxx , 0  , 0
xxxxx , 0  , 0
xxxxx , 845, 0
xxxxx , 845, 0
xxxxx , 0  ,545
xxxxx , 0  ,545

好的我修好了(下面)谢谢你们的帮助。

#!/usr/bin/python

import csv
import sys

#1. Place each record of a file in a list.
#2. Iterate thru each element of the list and get its length.
#3. If the length is less than one replace with value x.


reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
    for i, x in enumerate(row):
                if len(x)< 1:
                         x = row[i] = 0
    print ','.join(str(x) for x in row)

2 个答案:

答案 0 :(得分:4)

更改您的代码:

for row in reader:
    for x in row[:]:
                if len(x)< 1:
                         x = 0
                print x

成:

for row in reader:
    for i, x in enumerate(row):
                if len(x)< 1:
                         x = row[i] = 0
                print x

不确定您认为print正在完成什么,但关键问题是您需要修改row,为此您需要一个索引,enumerate 0 1}}给你。

另请注意,除了您正在更改为数字int的空值之外的所有其他值都将保留字符串。如果你想将它们变成{{1}},你必须明确地做到这一点。

答案 1 :(得分:1)

非常几乎就在那里!

只有几个小错误。

  • len(x)< 1不适用于数据第二行的第二列,因为x将包含' '(并且长度> 1)。您需要strip字符串。

  • print row可能会打印一个空列表,因为您已完成迭代。您可以删除此行。

另外:您是在尝试修改文件还是只是输出更正来管道到其他文件或进程?