使用python替换csv文件中的列?

时间:2016-07-07 10:09:07

标签: python csv

如何使用csv中的条件替换python文件中的列?

我的csv文件包含:

 34,2016-06-14 13:37:10,,1,,,t
 34,2016-06-15 13:48:20,,1,,,f
 34,2016-06-16 13:55:34,,1,,,t
 34,2016-06-17 13:48:40,,1,,,f
 34,2016-06-18 13:41:27,,1,,,t

我想根据条件更改最后一列。那就是我想要改变" t"到" 1"和" f"到" 0"使用python程序。

我见过许多例子,但没有这种情况,例子有点令人困惑。

我试了一下但是没有用。我也不知道它是否是正确的方法

f = open('/home/rck/Desktop/attendance/month.csv','rb')
fo = open('/home/rck/Desktop/attendance/demo.csv','wb')

for line in f:
    bits = line.split(',')

if bits[5] == '"t"':
    bits[5] = '"1"'    
elif bits[5] == '"f"':
    bits[5] = '"0"'
fo.write( ','.join(bits) )

f.close()
fo.close()

我怎样才能做到这一点?

谢谢....

3 个答案:

答案 0 :(得分:1)

查看您的示例,bits数组有7个元素,因此您需要测试bits[6]而不是bits[5]。 如果你知道你总是想要最后一个,那么bits[-1]就可以了。

另外,我认为您的引用'"t"'是正确的。我用't'表现得更好。

最后,最后一个元素(无论如何)包含换行符。 因此,为了实现匹配,我将测试更改为以下形式:

    if bits[-1] == 't\n':

这对我有用。 rafalmp的回答是有效的,因为它会搜索并替换整行,寻找角色' t'然后是换行符,它就是。

然而,一个设计差异是,当根据您的示例使用代码时,如果代码遇到未知字符(不是'或者' f'),它将离开性格不变。 rafalmp的代码总是将它改为' 0'如果它不是一个'。 要在您的示例中获得相同的效果,请将elif行更改为else而不进行补充测试。

答案 1 :(得分:0)

您可以使用正则表达式来完成这项工作:

import re

for line in f:
    line = re.sub('\w$', lambda x: '"1"' if x.group(0) == 't' else '"0"', line)
    fo.write(line)

答案 2 :(得分:0)

除非您坚持使用python,否则可以使用awk轻松完成以下操作:

awk '{$7= $7=="t" ? "1" : "0"}1' FS=',' OFS=',' month.csv

使用三元和FS(字段分隔符)和OFS(输出字段分隔符)替换第7列和0/1是,