2016-07-07 20 views
0

csvファイルの列を、pythonの条件で置き換える方法はありますか?pythonを使用してcsvファイルの列を置き換えますか?

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 

は私が状況に応じて、最後の列を変更したいです。つまり、私はPythonプログラムを使って "t"を "1"に、 "f"を "0"に変更したいと思います。

私は多くの例を見てきましたが、この条件では見当たりませんでした。例はちょっと混乱します。

少し試しましたが、動作しません。私はそれが正しい方法であるかどうかもわかりません

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() 

どうすればいいですか?

おかげで....

+1

あなたの試行を見せてください、これは非常に簡単です – EdChum

+0

あなたはパイソンでcsvモジュールを試しましたか? –

答えて

1

はあなたの例を見てみるとそこにビット配列への7つの要素があるので、あなたはbits[6]をないテストする必要がありますbits[5]。 いつも最後のものが欲しいと知っていればbits[-1]が働きます。

また、私はあなたの引用'"t"'が正しいとは思わない。 't'でうまくやった。

最後に、最後の要素(私にとってはとにかく)に改行文字が含まれています。

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

これは、その後、私の仕事: だから試合を達成するために、私は、このフォームにテストを変更しました。 rafalmpの答えは、改行を続けた文字 't'を探して、行全体を検索して置き換えるときに機能します。

ただし、あなたの例に基づいてコードを使用すると、コードが未知の文字( 't'または 'f'ではない)に遭遇すると、文字は変更されないままになります。 rafalmpのコードは、 't'でなければ常に '0'に変更します。 の場合は、elif行を補足テストなしでelseに変更してください。あなたはpythonを主張しない限り

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) 
+0

あなたの答えをありがとう。コードは値を変更しますが、 '1'ではなく '0'として 't'を変更します "x == 'tの場合、行を" re =(' \ w $ '、lambda x:' 0 ' 'else' 1 '、line) "今度は' t 'を' 1 'に変更します。 – sathish

+1

申し訳ありませんが、ラムダ関数で間違いを犯しました。 – rafalmp

+0

@sathish、rafalmpによる編集を確認してください。 'x。group(0) 'は' x 'でなく比較されるべきです。 – SilentMonk

0

が、それは簡単に以下のようawkで行われます:三元およびFS(フィールドセパレータ)とOFS(出力フィールドセパレータ)を使用して0/1で7番目の列を置き換える

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

,です。

関連する問題