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

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

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

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

Q&A

解決済

1回答

1794閲覧

csvファイル内の一致比較

zzzaaa

総合スコア4

Python 3.x

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

0グッド

1クリップ

投稿2020/07/12 00:08

編集2020/07/12 09:18

前提・実現したいこと

二つのExcelファイルを比較して一致しているかを確認するプログラムを作成したいです。

1

data1.csv

12345青紫

2

data2.csv

1234冬 赤 5  青 6  黄 7  紫 白 8    黒

行いたい処理としましては2のExcelファイルの中身が1の中身と一致しているかを確認したいです。
理想の出力としては

春 夏 赤 黒

となると理想的であります。
現状のプログラムとして

hikaku.py

1#coding: utf-8 2 3import csv; 4 5for row in csv.reader(open('data1.csv', 'r')): #根性マイニング 6 for row2 in csv.reader(open('data2.csv', 'r'), delimiter = '\t'): #料理オントロジー 7 #if ( row[0] == row2[0] or row[0] == row2[1] or row[0] == row2[2]): 8 print (row[0]);

となります。

エラー

Traceback (most recent call last): File "hikaku.py", line 7, in <module> if ( row[0] == row2[0] or row[0] == row2[1] or row[0] == row2[2]): IndexError: list index out of range

print(row2[0])とすると

,, 夏,, 秋,, 冬,赤, ,青, ,黄, ,紫,白 ,,黒 春,, 夏,, 秋,, 冬,赤, ,青, ,黄, ,紫,白 ,,黒 春,, 夏,, 秋,, 冬,赤, ,青, ,黄, ,紫,白 ,,黒 春,, 夏,, 秋,, 冬,赤, ,青, ,黄, ,紫,白 ,,黒 春,, 夏,, 秋,, 冬,赤, ,青, ,黄, ,紫,白 ,,黒

というようになりますので横の列で読み込んでいることがわかります。data2.csvを一つずつ読み込みたいです。
出力はターミナル上にprintできれば現状は満足です。

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

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

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

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

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

meg_

2020/07/12 02:34

Excelファイルということはxlsx形式のファイルですか?
zzzaaa

2020/07/12 02:37

xlsx形式のファイルで読み込みをしたいです。
meg_

2020/07/12 02:55

「どのような命令をすればいいでしょうか。」 ← やりたい処理が分かりにくいです。 ・文字は1つのセルに1つですか? ・2文字以上存在することはありませんか? ・シート内に同じ文字のセルが複数存在する場合の処理は? ・出力とはどんな出力か?(画面出力?ファイル出力?(形式は?)) ・出力の文字の出現順は決まっているのか? また、作成途中でも良いのでコードがあれば提示してください。
zzzaaa

2020/07/12 09:20

質問文を進行状態に修正いたしました。 質問に対してですが、文字は1つのセルに一つです。excelをcsvファイルでの処理に変更しました。 2文字以上同じ単語がdata2.csvに存在してもdata1には一つしか存在しませんので比較した時に問題はないと考えています。
aokikenichi

2020/07/12 10:28

質問内容が今ひとつ分からず , で文字列を分けたいということでしょうか 2つのファイルが一致しているかを知りたいとのことで1、2の内容が明らかに異なりますが 理想的という出力がどういうルールで出力され、2つのファイルが一致していることとどう関わっているのかが分かりません 今一度問題点を整理なさった方がよろしいかと思います
zzzaaa

2020/07/12 10:51

1の春という単語に対し、2の春夏秋冬赤青黄紫白黒と比較し、春がかぶっているので出力、同様に次に夏を比較していきかぶるものがあるので出力をしたいです。 スペース部分にカンマがあるものとしています。(excelでcsvを見るとセルの分け目になっているのでスペースで置いていました。わかりづらくてすみません。)
aokikenichi

2020/07/12 11:01

ということは1ありきで一致する2の行を探すというイメージでしょうか。 疑問としてはもう一点明らかにしたいのですが カンマで分割していないので row2[2] はあり得ず IndexError: list index out of range が出ているのだと思いますがそれを解決したいとのことでしょうか 他の方のやりとりを見ても何を解決なさりたいのかよく分かりません
zzzaaa

2020/07/12 11:11

2の中身は正しくは 春,, 夏,, 秋,, 冬,赤, ,青, ,黄, ,紫,白 ,,黒 です。 行でも列でもなく、単語ごとに比較していきたいです。 解決したいのはエラー文ではないです。プログラムの改変方法が知りたいです。
zzzaaa

2020/07/12 11:56 編集

#coding: utf-8 import csv; for row in csv.reader(open('data1.csv', 'r'), delimiter = ','): for row2 in csv.reader(open('data2.csv', 'r'), delimiter = ','): if (row[0] == row2[0] or row[0] == row2[1] or row[0] == row2[2]): print (row[0]); このようにコードを変更したらうまく処理ができました。delimiterをカンマ区切りにすることでうまく通りました。
guest

回答1

0

自己解決

python

1#coding: utf-8 2 3import csv; 4 5for row in csv.reader(open('data1.csv', 'r'), delimiter = ','): 6 for row2 in csv.reader(open('data2.csv', 'r'), delimiter = ','): 7 if (row[0] == row2[0] or row[0] == row2[1] or row[0] == row2[2]): 8 print (row[0]); 9

delimiterの区切り方をカンマにすることで解決

投稿2020/07/12 11:57

zzzaaa

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問