用z替换空csv列值

2024-05-16 04:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在处理一个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)

Tags: ofcsvtheinimportforsyslength
2条回答

你快到了!

只有几个小虫子。

  • len(x)< 1对数据第二行的第二列不起作用,因为x将包含' '(并具有长度>;1)。你需要strip你的字符串。

  • print row可能会打印空列表,因为您已经完成了迭代。你可以去掉这条线。

另外:您是想修改文件,还是只是将更正输出到管道到其他文件或进程?

更改代码:

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的空值之外,都将保持字符串。如果你想把它们变成ints,你必须显式地这样做。

相关问题 更多 >