質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

10898閲覧

pythonでcsvファイルの文字列を置換する方法を教えてください

GO20140310

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/08/25 17:12

前提・実現したいこと

pythonでcsvの編集を行いたいです。
下記のような表形式になっていた場合、文字列「aaa」を文字列「AAA」に置換するには、どのようにすればよいのでしょうか。

|列1|列2|列3|列4|列5|列6|列7|列8|列9|列10|列11|列12|列13|列14|
|aaa|aaa|bb|vv|aaa|aaa|aaa|aaa|ddd|ggg|aaa|aaa|aaa|fff|
|w|aa|f|g|aaa|a|aa||gfg|fff|eee|ggg|aaa|aaa|ggg|

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Pythonなど不要。そう、シェル芸ならね!

bash

1$ sed -i 's/aaa/AAA/g' file.csv

投稿2018/08/25 20:52

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

csvはテキストファイルなので、通常のテキスト編集と同様に処理できます。

ファイルを開きまるごと文字列として読み込む→str.replace()等のメソッドで編集する→同じファイルに書き出す

という流れをプログラムで書けばそれで良さそうですね。

追記

python

1with open(ファイル名, "r") as f: 2 s = f.read() 3s = s.replace("aaa", "AAA") 4 5with open(ファイル名, "w") as f: 6 f.write(s)

投稿2018/08/25 18:29

編集2018/08/27 15:48
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GO20140310

2018/08/27 15:43

ありがとうございます!! もしよろしければ、具体的なコードをご教示頂けませんでしょうか。 期限が迫っているプロジェクトなのですが、pythonでの開発経験が乏しく、苦戦しております、、、
GO20140310

2018/08/27 17:02

早速のご回答、本当にありがとうございます。 頂いたコードを実行したところ、「UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence 」 とのエラーが出てしまいました。 いろいろと調べてみたのですが、解決方法がわかりませんでした、、 もし可能であれば、再度、ご教示いただけますと幸いです。
hayataka2049

2018/08/27 17:08

encoding引数が要るのですかね。環境に応じて適切に指定してください("sjis"や"utf-8"など)
hayataka2049

2018/08/27 17:12 編集

ファイルの文字コードがわかればそれにすれば良いです。そのメッセージならBOMつきUTF-8っぽいので"utf-8_sig"でどうでしょう
GO20140310

2018/08/27 17:24

本当にありがとうございます。 with open("data.csv", "r", encoding = "utf-8_sig") as f: s = f.read() s = s.replace("aaa", "AAA") with open("data.csv", "w") as f: f.write(s) として実行したところ、「data.csv is not UTF-8 encoded.」とのエラーが出てしまいました。 そこで、with open("data.csv", "r", encoding = "utf-8_sig") as f: s = f.read() s = s.replace("男", "Male") with open("data.csv", "w", encoding = "utf-8_sig") as f: f.write(s) として実行したところ、 UnicodeDecodeError Traceback (most recent call last) <ipython-input-44-620918327391> in <module>() 1 with open("data.csv", "r", encoding = "utf-8_sig") as f: ----> 2 s = f.read() 3 s = s.replace("aaa", "AAA") 4 5 with open("data.csv", "w", encoding = "utf-8_sig") as f: ~\Anaconda3\lib\codecs.py in decode(self, input, final) 319 # decode input (taking the buffer into account) 320 data = self.buffer + input --> 321 (result, consumed) = self._buffer_decode(data, self.errors, final) 322 # keep undecoded input until the next call 323 self.buffer = data[consumed:] ~\Anaconda3\lib\encodings\utf_8_sig.py in _buffer_decode(self, input, errors, final) 67 codecs.utf_8_decode(input[3:], errors, final) 68 return (output, consumed+3) ---> 69 return codecs.utf_8_decode(input, errors, final) 70 71 def reset(self): UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8a in position 0: invalid start byte とのエラーが出てしまいました。 何度も何度も申し訳ないのですが、 いかが致せばよろしいでしょうか。
hayataka2049

2018/08/27 18:09 編集

ならBOMつきUTF-8ではないのかもしれません。そのファイルの文字コードは何でしょうか?
GO20140310

2018/08/27 18:14

ファイルの文字コードはBOMつきUTF-8かと思います。Rにて当該ファイルを読み込んだ際、BOMつきUTF-8のコマンドで読み込みましたので、、
hayataka2049

2018/08/27 18:38

試しにBOMつきUTF-8の適当なファイルを作り(日本語等を適当に混ぜるのが好ましいです)、そのファイルに対して下のプログラム(読み込み、書き込みともにencodingを指定したもの)が上手く機能するかどうか確認してください。 あと、"data.csv"の文字コードをもう一度よく確認してください。
GO20140310

2018/08/27 23:23

できました!!本当にありがとうございました。
GO20140310

2018/08/28 06:21

確認したところ、仰る通りでした。とても勉強になりました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問