2017-10-30 20 views
0

私はcsvファイルを持っています。私はPythonで正規表現置換を適用したいと思います。Pythonのcsvファイルにregex subを適用するには

これまでのところ、私は私に次のエラー与えている

reader = csv.reader(open('ffrk_inventory_relics.csv', 'r')) 
writer = csv.writer(open('outfile.csv','w')) 
for row in reader: 
    reader = re.sub(r'\+','z',reader) 

次き:あまり運にグーグル後

Script error: Traceback (most recent call last): 
    File "ffrk_inventory_tracker_v1.6.py", line 22, in response 
    getRelics(data['equipments'], 'ffrk_inventory_relics') 
    File "ffrk_inventory_tracker_v1.6.py", line 72, in getRelics 
    reader = re.sub(r'\+','z',reader) 
    File "c:\users\baconcatbug\appdata\local\programs\python\python36\lib\re.py", 
line 191, in sub 
    return _compile(pattern, flags).sub(repl, string, count) 
TypeError: expected string or bytes-like object 

を、私は開く方法をここにコミュニティをお願いしたいと思いますcsvファイルを正しく読み込んでre.subを使用して、変更されたcsvファイルを同じファイル名に書き戻すことができます。

+0

をあなたは 're.sub'に' reader'を渡しているのはなぜ?代わりに 'row'を渡してください。 –

+0

@MosesKoledoye 'row'は' list'であり、 're.sub'の適切な引数でもありません。 – schwobaseggl

+0

@schwobasegglそうです。 Brainfart。 –

答えて

0

あなたが定期的にopenreplaceを使用することができます。

with open('ffrk_inventory_relics.csv', 'r') as reader, open('outfile.csv','w') as writer: 
    for row in reader: 
     writer.write(row.replace('+','z')) 
+0

+とzは単に置換するテスト文字列だったので、最後の置換は大きな正規表現の引数です – BaconCatBug

+0

確かに 'row = re.sub( '\ +'、 'z'、row)の意味で目的の正規表現に変更できます' – zipa

+0

次のコードは動作していますが、どのようにしてoutfile.csvをffrk_inventory_relics.csvに置き換えますか? (なぜフォーマットが乱されているのかわからないので、コードブロックで以下を表現する方法がわからない) \t 'with open( 'ffrk_inventory_relics.csv'、 'r')を読者として開き、 'outfile.csv '作家として):読者の行のための ' \t \t \t' ' \t \t \t \t \t'行= re.sub( ''、W'(\ + *、[^、] *、[^ 、] *、[^、] * \ 0)」、 '(コア)\\ G <1>'、列) ' \t \t \t \t \t \t 'writer.write(row)' – BaconCatBug

0

csv.reader(open('ffrk_inventory_relics.csv', 'r'))はリストのリストを作成しており、それを反復して各値をre.subに渡すと、文字列ではなくリストが渡されます。これを試してください:あなたはcsvを必要としない場合

import re 
import csv 
final_data = [[re.sub('\+', 'z', b) for b in i] for i in csv.reader(open('ffrk_inventory_relics.csv', 'r'))] 
write = csv.writer(open('ffrk_inventory_relics.csv')) 
write.writerows(final_data) 
+0

そして、csvファイルにfinal_dataを書き込むにはどうすればよいですか? – BaconCatBug

+0

@BaconCatBug最近の私の編集をご覧ください。 – Ajax1234

関連する問題