2017-03-07 7 views
-1

他の解決策は私にとってはうまくいきません。私はcsvファイルをjsonファイルと比較して、jsonファイルにcsvファイル内の文字列があるかどうかを確認したいと思います。jsonをcsvファイルのpythonに変換中にエラーが発生しました。

jsoned = json.loads(x) 

with open("test.csv", "wb+") as csv_file: 
    csv_writer = csv.writer(csv_file) 
    for i in jsoned: 
     csv_writer.writerow([i[u'tag'], 
          i[u'newtag']]) 

(他のStackOverflowのポストから適応)私が試した

しかし、それは働いていません。他のルートに行き、csvをjsonに変える方がよいでしょうか?

編集

JSONファイル:

{"tag":["security architecture","systems security engineering","architecture","program protection planning (ppp)","system security engineering","security engineering"],"newtag":["security","architecture engineering & policy","certified ethical hacker","security policy and risk management","sse","enterprise transition plan","plan","tax","capacity analysis"]} 

はCSV:

id tag 
88 systems engineering 
88 project management 
88 program management 
88 strategic planning 
88 requirements analysis 
88 acquisition 
88 enterprise architecture 
134 java 
134 software engineering 
134 software development 
134 xml 
134 c++ 
134 sql 
134 web services 
134 javascript 
134 linux 
134 html 
134 python 
134 c 
134 c# 
134 software architecture 
134 eclipse 
134 jquery 
134 oracle 
134 perl 
161 project management 
161 systems engineering 
161 requirements engineering 
161 requirements management 

私はJSONファイルが(最もマッチを持っているIDを見たいので、私は知りたいですIDごとにいくつのタグマッチがあるのか​​分かりませんが、jsonとcsvを比較する方法はわかりません)

+1

定義「それは働いていない」 – Cfreak

+2

万が一、私たちは、JSONやCSVファイルの形式を見ることができましたか? – RichSmith

+2

比較は行われません。ファイルに書き込むだけです。正確に何を比較すべきか? – roganjosh

答えて

1

私はあなたの質問に間違いを感じているかもしれませんが、うまくいけば、これは少なくともあなたを始めさせるでしょう。

私はこれを行うより良い方法が必要であることは確かですが、ここでそれを行う方法があります。

まず、データを読み込み、csvデータをネストされたリストに入れ、jsonデータをdictに取得します。次に、csvファイル内のすべての一意のIDを取得します。

各ユニークIDのcsvファイルを調べ、jsonタグに存在するタグの数を数えます。

カウントが現在の最大値よりも大きい場合は、そのIDを最良のものとして保存します。

ループが完了したら、jsonタグに最も多くのタグを持つIDを持つ必要があります。

# load csv data 
with open("csvdata.csv") as csvFile: 
    reader = csv.reader(csvFile) 
    loadedCSV = [row for row in reader] 

# load json data and get list of tags 
jsonTags = json.load("jsonFile.json")["tags"] 

# create a unique list of ids from csv file 
uniqueIDs = list(set([row[0] for row in loadedCSV]])) 

# best match so far 
selectedID = None 

# keep track of best count 
maxCount = 0 

# go through ids 
for id in uniqueIDs: 

    # count for specific ID 
    idCount = 0 

    # go through tags in csv and add one to count if in json tags 
    for row in loadedCSV: 
     if row[0] == id: 
      if row[1] in jsonTags: 
       idCount += 1 
    # compare count to current max 
    if idCount > maxCount: 
     selectedID = id 
+0

ありがとうRichSmith、私はそれを調べます。私はそのコードに似た何かを持っていますが、jsonと闘っていました。 – user6754289

+0

何も表示されませんが、selectedIDまたはmaxCountを出力します。それはidCount = + 1の後に壊れているようです。なぜなら、それはIDと比較していて、csvのタグではないからですか? – user6754289

+0

@karmestoループの前にuniqueIDs、loadedCSV、jsonTagsを印刷して、正しい形式で正しくロードされていることを確認する価値があります。午前中に残りのコードをチェックします:) – RichSmith

関連する問題