在Python中使用CSV模块替换值与其他值

时间:2015-04-07 01:56:58

标签: python csv

我对Python中的csv模块相当缺乏经验,并且想知道是否有人可以提供任何指示。我一直在寻找关于这个问题的许多其他问题,但我没有找到答案。

我想要做的就是更改值,在这种情况下它将是“n / a”并在我的csv文件中将其替换为0。这些不适用的值都在所有列中,因此我无法将其精确定位到一个特定列。

到目前为止,这是我的代码:

with open("MyCSV.csv","rb") as infile,open("Write.csv","wb") as outfile:
    reader= csv.reader(infile)
    writer= csv.writer(outfile)
    conversion= set('(n/a)')
    for row in reader:
        newrow=[''.join('0' if c in conversion else c for c in entry)for       entry in row]
        writer.writerow(newrow)

我在结果中遇到的问题是任何a或n都转换为0.这显然是因为正在读取每个'n'或'a'应该被转换。

感谢有人给予的任何帮助。

2 个答案:

答案 0 :(得分:1)

set接受一个序列并使用该序列中的所有项来制作该集合。由于字符串是序列,你最终得到的是:

set('(n/a)')
Out[7]: {'(', ')', '/', 'a', 'n'}

即。每个角色作为一个项目。如果您希望该集合具有一个项目,即完整(不适用)字符串,则使用一个项目创建列表:

set(['(n/a)'])
Out[8]: {'(n/a)'}

答案 1 :(得分:1)

以下是使用csv模块

的方法
with open("MyCSV.csv","rb") as infile,open("Write.csv","wb") as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    for row in reader:
        row = [x.replace('n/a', '0') if x == 'n/a' else x for x in row]
        writer.writerow(row)

Regex可能是更好的选择,如下所示:

import re
with open("MyCSV.csv", "rb") as f1:
    lines = f1.read()
    for line in re.sub('n/a', '0', lines):
        print line,