如何使用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()
我怎样才能做到这一点?
谢谢....
答案 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是,
。