前提・実現したいこと
二つのExcelファイルを比較して一致しているかを確認するプログラムを作成したいです。
1
data1.csv
1春 2夏 3赤 4黒 5青紫
2
data2.csv
1春 2夏 3秋 4冬 赤 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できれば現状は満足です。
Excelファイルということはxlsx形式のファイルですか?
xlsx形式のファイルで読み込みをしたいです。
「どのような命令をすればいいでしょうか。」 ← やりたい処理が分かりにくいです。
・文字は1つのセルに1つですか?
・2文字以上存在することはありませんか?
・シート内に同じ文字のセルが複数存在する場合の処理は?
・出力とはどんな出力か?(画面出力?ファイル出力?(形式は?))
・出力の文字の出現順は決まっているのか?
また、作成途中でも良いのでコードがあれば提示してください。
質問文を進行状態に修正いたしました。
質問に対してですが、文字は1つのセルに一つです。excelをcsvファイルでの処理に変更しました。
2文字以上同じ単語がdata2.csvに存在してもdata1には一つしか存在しませんので比較した時に問題はないと考えています。
質問内容が今ひとつ分からず
, で文字列を分けたいということでしょうか
2つのファイルが一致しているかを知りたいとのことで1、2の内容が明らかに異なりますが
理想的という出力がどういうルールで出力され、2つのファイルが一致していることとどう関わっているのかが分かりません
今一度問題点を整理なさった方がよろしいかと思います
1の春という単語に対し、2の春夏秋冬赤青黄紫白黒と比較し、春がかぶっているので出力、同様に次に夏を比較していきかぶるものがあるので出力をしたいです。
スペース部分にカンマがあるものとしています。(excelでcsvを見るとセルの分け目になっているのでスペースで置いていました。わかりづらくてすみません。)
ということは1ありきで一致する2の行を探すというイメージでしょうか。
疑問としてはもう一点明らかにしたいのですが
カンマで分割していないので row2[2] はあり得ず IndexError: list index out of range
が出ているのだと思いますがそれを解決したいとのことでしょうか
他の方のやりとりを見ても何を解決なさりたいのかよく分かりません
2の中身は正しくは
春,,
夏,,
秋,,
冬,赤,
,青,
,黄,
,紫,白
,,黒
です。
行でも列でもなく、単語ごとに比較していきたいです。
解決したいのはエラー文ではないです。プログラムの改変方法が知りたいです。
#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をカンマ区切りにすることでうまく通りました。
回答1件
あなたの回答
tips
プレビュー