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

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

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2735閲覧

[python]二つのcsvファイルから一致する行を抽出して書き込む

kkkkknnnnn

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/09 16:01

下記のようなdata1.csv,data2.csvのようなcsvファイルがあるとき、data3.csvのようにdata1.csvとdata2.csvのnameが一致する行にdata1.csvのsを追加で書き込むようなプログラムを作りたいです。

csv

1###data1.csv### 2name,s 3a1,5 4a2,6 5a3,1 6a4,3 7a5,7 8a6,1

csv

1###data2.csv### 2num,name,d1,d2,d3 31,a1,4,6,2 42,a2,9,7,3 53,a3,3,3,4 64,a4,5,2,3 71,a1,6,6,2 82,a2,3,8,3 95,a5,3,6,4 106,a6,9,5,3

csv

1###data3.csv### 2num,name,d1,d2,d3,s 31,a1,4,6,2,5 42,a2,9,7,3,6 53,a3,3,3,4,1 64,a4,5,2,3,3 71,a1,6,6,2,5 82,a2,3,8,3,6 95,a5,3,6,4,7 106,a6,9,5,3,1

python

1# csvファイルを扱うための関数を読み込む 2import csv 3import glob 4import os 5import shutil 6 7 8 9# read_fpをdata.csvの読み込みポインタとして定義 10read_fp1=csv.reader(open("data1.csv", "r")) 11read_fp2=csv.reader(open("data2.csv", "r")) 12 13with open('data3.csv', 'w') as f: 14 writer = csv.writer(f) 15 16 17for line2 in read_fp2: 18 num = line2[0] 19 name1 = line2[1] 20 d1 = line2[2] 21 d2 = line2[3] 22 d3 = line2[4] 23 for line in read_fp1: 24 name2 = line[0] 25 s = line[1] 26 if name1==name2: 27 with open('data3.csv', 'a') as f: 28 writer = csv.writer(f) 29 writer.writerow(['num','name','d1','d2','d3','s']) 30 f.close()

for文でnameが一致する行を書き込もうとしましたが、うまく動かずできなかったため、ご教授お願いいたします。

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

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

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

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

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

meg_

2021/12/09 16:13

> うまく動かずできなかったため 上記はエラーで動作しなかったという意味でしょうか?別の意味でしょうか?
kkkkknnnnn

2021/12/09 16:15

エラーは出なかったのですが、if文の中に入らずdata3.csvに書き込めなかったという意味です。曖昧な表現をしてしまい、申し訳ありません。
guest

回答2

0

ベストアンサー

pandasを使うのが楽です。

python

1import pandas as pd 2 3df1 = pd.read_csv('data1.csv') 4df2 = pd.read_csv('data2.csv') 5df3 = pd.merge(df2, df1, how='left') 6df3.to_csv('data3.csv', index=None) 7print(df1) 8print(df2) 9print(df3)

実行結果の一部

python

1>>> print(df1) 2 name s 30 a1 5 41 a2 6 52 a3 1 63 a4 3 74 a5 7 85 a6 1 9>>> print(df2) 10 num name d1 d2 d3 110 1 a1 4 6 2 121 2 a2 9 7 3 132 3 a3 3 3 4 143 4 a4 5 2 3 154 1 a1 6 6 2 165 2 a2 3 8 3 176 5 a5 3 6 4 187 6 a6 9 5 3 19>>> print(df3) 20 num name d1 d2 d3 s 210 1 a1 4 6 2 5 221 2 a2 9 7 3 6 232 3 a3 3 3 4 1 243 4 a4 5 2 3 3 254 1 a1 6 6 2 5 265 2 a2 3 8 3 6 276 5 a5 3 6 4 7 287 6 a6 9 5 3 1

参考
pandasでcsv/tsvファイル読み込み(read_csv, read_table)
pandas.DataFrameを結合するmerge, join(列・インデックス基準)
pandasでcsvファイルの書き出し・追記(to_csv)

投稿2021/12/09 16:51

ppaul

総合スコア24666

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

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

kkkkknnnnn

2021/12/09 16:59

pandasだとこんな簡単に作れるんですね、、 ありがとうございます! 課題「if文の中に入らずdata3.csvに書き込めなかった」についても改善していただいた部分を書き直したら動きましたが、pandasの方で取り組みたいと思います。
guest

0

問題は他にもありますが、直面している課題「if文の中に入らずdata3.csvに書き込めなかった」について改善しました。

Python

1# csvファイルを扱うための関数を読み込む 2import csv 3import glob 4import os 5import shutil 6 7 8 9# read_fpをdata.csvの読み込みポインタとして定義 10read_fp1=csv.reader(open("data1.csv", "r")) 11data1 = [row for row in read_fp1] 12read_fp2=csv.reader(open("data2.csv", "r")) 13 14with open('data3.csv', 'w') as f: 15 writer = csv.writer(f) 16 17 18for line2 in read_fp2: 19 num = line2[0] 20 name1 = line2[1] 21 d1 = line2[2] 22 d2 = line2[3] 23 d3 = line2[4] 24 for line in data1: 25 name2 = line[0] 26 s = line[1] 27 if name1==name2: 28 with open('data3.csv', 'a') as f: 29 writer = csv.writer(f) 30 writer.writerow(['num','name','d1','d2','d3','s']) 31 f.close()

修正箇所はdata1 = [row for row in read_fp1]for line in data1:になります。
元のコードではdata1.csvを一度読み込んで終了してしまいますので、データをリストに格納して使用しています。

投稿2021/12/09 16:51

meg_

総合スコア10577

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問