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

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

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

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

Q&A

解決済

5回答

932閲覧

ファイルの特定の文章だけ別ファイルに書き込みたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2018/10/11 07:14

ファイル構成
|-input
| |-books.csv
|-output
| |-book_python.csv

input/books.csvの中身
2015-01-02,後藤拓也,Staff mtg
2015-01-03,丸山貞子,Python-勉強会
2015-01-04,平野幸子,PHP-勉強会
2015-01-06,平野幸子,PHP-勉強会
2015-01-07,原田麻美,Python-勉強会
2015-01-08,横山久美子,その他
〜以下、省略〜

input/books.csvのPython-勉強会の行のみをファイル'output/book_python.csv'に出力しようと思い自分が書いたコードです

with open('input/books.csv', encoding='utf-8') as f: for row in f: row_format = row.rstrip().split(',') if row_format[2] == "Python-勉強会": with open('output/book_python.csv', 'a', encoding='utf-8') as f2: f2.write(row)

出力結果
2015-01-03,丸山貞子,Python-勉強会
2015-01-07,原田麻美,Python-勉強会
〜以下、省略〜
2015-01-03,丸山貞子,Python-勉強会
2015-01-07,原田麻美,Python-勉強会
〜以下、省略〜

出力結果は同じものが全て2回ずつ取得されてしまうのですが何が原因なのでしょうか?1回にしたいです。

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

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

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

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

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

guest

回答5

0

python csv file filter
で google検索して、どんなプログラム例があるか調べてみました。

参考情報

  • How to Filter from CSV file using Python Script

https://stackoverflow.com/questions/10530301/h

投稿2018/10/12 21:15

編集2018/10/13 08:35
katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2018/10/13 05:37

Pyqのシステムの不具合によるものでした。 ご回答ありがとうございます。
guest

0

追記してるだけだから、最初に全部消しとかないと

投稿2018/10/11 07:22

y_waiwai

総合スコア87774

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

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

退会済みユーザー

退会済みユーザー

2018/10/11 07:35

PyQというサイトの問題なのですがoutput/book_python.csvの中身を消した状態で一度だけ実行をしても2回ずつ書き込まれてしまい間違いと表示がされてしまいます。 コード自体は間違いはないのでしょうか?
y_waiwai

2018/10/11 07:37

あなたのPCで実行させてみれば? ぱっとみーでは2回書かれるようなところはなさそうですが
退会済みユーザー

退会済みユーザー

2018/10/11 07:46

やってみたところ、きちんと一度だけPython-勉強会の行だけが取得できていました。 PyQに問い合わせてみます。 ありがとうございます。
guest

0

こんな感じでどうでしょうか

  1. CSV 読み込み
  2. filter() で 3列目が 'Python-勉強会' となっている行だけ抽出
  3. CSV 書き込み

サンプルコード

python

1import csv 2 3with open('books.csv', encoding='utf-8') as f: 4 data = list(csv.reader(f)) 5 print(data) 6 7# 3列目が 'Python-勉強会' となっている行だけ抽出 8data = list(filter(lambda x: x[2] == 'Python-勉強会', data)) 9 10with open('outputs.csv', 'w', encoding='utf-8') as f: 11 csv.writer(f).writerows(data)

input

12015-01-03,丸山貞子,Python-勉強会 22015-01-07,田中太郎,Python-勉強しない会 32015-01-03,丸山久美子,Python-勉強会 42015-01-07,田中二郎,Python-勉強しない会 52015-01-03,丸山えり子,Python-勉強会 62015-01-07,田中三郎,Python-勉強しない会

output

12015-01-03,丸山貞子,Python-勉強会 22015-01-03,丸山久美子,Python-勉強会 32015-01-03,丸山えり子,Python-勉強会

投稿2018/10/11 07:20

tiitoi

総合スコア21956

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

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

退会済みユーザー

退会済みユーザー

2018/10/13 05:37

Pyqのシステムの不具合によるものでした。 ご回答ありがとうございます。
guest

0

open('output/book_python.csv', 'a', encoding='utf-8')

'a' は追記(append)モードなので実行した回数だけどんどん追記されていきます。

open('output/book_python.csv', 'w', encoding='utf-8')

'w' は書き込み(write)モードで、一旦内容をクリアして先頭から書き込みます。

投稿2018/10/11 07:20

mather

総合スコア6753

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

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

退会済みユーザー

退会済みユーザー

2018/10/13 05:36

ご回答ありがとうございます。
guest

0

ベストアンサー

出力ファイルを開くのは一度だけにし、wモードで開きます。

Python

1with open('input/books.csv', encoding='utf-8') as fin, \ 2 open('output/book_python.csv', 'w', encoding='utf-8') as fout: 3 4 for row in fin: 5 row_format = row.rstrip().split(',') 6 if row_format[2] == "Python-勉強会": 7 fout.write(row)

追記モードaは少し使いづらい印象です。

PyQというサイトの問題なのですがoutput/book_python.csvの中身を消した状態で一度だけ実行をしても2回ずつ書き込まれてしまい間違いと表示がされてしまいます。

コード自体は間違いはないのでしょうか?

問題ないと思いますが。Wandbox

投稿2018/10/11 07:20

編集2018/10/11 07:44
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2018/10/11 07:24

最初にoutput/book_python.csvに 2015-01-03,丸山貞子,Python-勉強会 書き込み、上書きをせずに 2015-01-07,原田麻美,Python-勉強会 を次の行に追記するためaでないといけないと思ったのですがなぜwでいいのでしょうか? それとaだとなぜ2回だけ書き込まれ3回4回とは書き込まれていないのでしょうか?
LouiS0616

2018/10/11 07:27

単にプログラムを二回実行したのでは無いでしょうか? もう一回動かしたら三回書き込まれて見えると思いますよ。
LouiS0616

2018/10/11 07:27

> なぜwでいいのでしょうか? ループ外でファイルを開いているからです。
退会済みユーザー

退会済みユーザー

2018/10/11 07:33

PyQというサイトの問題なのですがoutput/book_python.csvの中身を消した状態で一度だけ実行をしても2回ずつ書き込まれてしまい間違いと表示がされてしまいます。 コード自体は間違いはないのでしょうか?
退会済みユーザー

退会済みユーザー

2018/10/11 07:49

ご回答ありがとうございます。 間違いがないのならPyQ側の問題かもしれないですね。 問い合わせてみることにします。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問