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

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

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

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

Q&A

解決済

4回答

5352閲覧

python: csvをjsonに変換すると、数値が文字列になってしまいます

hihamo

総合スコア2

Python

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

1グッド

0クリップ

投稿2021/06/21 06:06

前提・実現したいこと

csvデータの内容を若干変更し、jsonに変換したいと思っております。

下記のようなコードにしたところ、idのvalueが文字列となってしまいます。
数値としてjsonデータにするには、どのようにすれば良いかわからず
質問させていただきました。
ご教授いただければ幸いです。何卒よろしくお願い致します。

※元となるcsvでは、サイズが幅(W)と高さ(H)にわかれていますが
jsonでは幅×高さという表記にしたいため、
冗長だと思ったのですが、test2.csvを作成→json変換としました。

発生している問題・エラーメッセージ

json

1// "id"の"1001"を1001としたいです。(1002も) 2[ 3 { 4 "id": "1001", 5 "name": " テスト1", 6 "size": " 50 × 100" 7 }, 8 { 9 "id": "1002", 10 "name": " テスト2", 11 "size": " 60 × 110" 12 } 13]

該当のソースコード

csv

1id,name,sizeW,sizeH 21001, テスト1, 50, 100 31002, テスト2, 60, 110

python

1import json 2import csv 3 4json_list = [] 5 6#元データを開く(test.csv) 7with open('test.csv', mode='r', encoding='utf-8') as rf: 8 reader = csv.reader(rf) 9 next(reader) 10 #サイズ表記をまとめたcsvを作成(test2.csv) 11 with open('test2.csv', mode='w', encoding='utf-8') as wf: 12 writer = csv.writer(wf) 13 writer.writerow(['id', 'name', 'size']) 14 for line in reader: 15 id = line[0] 16 name = line[1] 17 sizeW = line[2] 18 sizeH = line[3] 19 size = sizeW + ' ×' + sizeH 20 writer.writerow([id, name, size]) 21 22with open('test2.csv', 'r') as f: 23 for line in csv.DictReader(f): 24 json_list.append(line) 25 26#jsonデータを作成 27with open('test.json', 'w') as f: 28 json.dump(json_list, f, indent=2, ensure_ascii=False)
oyatsu8👍を押しています

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

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

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

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

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

guest

回答4

0

もしpandasも使って良いというのでしたら、csvモジュールより楽かと思います。

python3

1import pandas as pd 2 3df = pd.read_csv("test.csv") 4df["size"] = df["sizeW"].astype(str) + ' × ' + df["sizeH"].astype(str) 5df2 = df.loc[:, ["id", "name", "size"]] 6print(df2) 7# id name size 8# 0 1001 テスト1 50 × 100 9# 1 1002 テスト2 60 × 110 10 11df2.to_json("test.json",orient='records')

投稿2021/06/21 06:32

jeanbiego

総合スコア3966

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

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

hihamo

2021/06/21 06:48

ご回答ありがとうございます! pandasを使ったことがなかったのですが、 こんなにシンプルなコードになるのですね。 インストールしてみます。ありがとうございます。
guest

0

ベストアンサー

以下のようにid = int(line[0])とします。
そして読み込んだ結果からそのままjson_listを作成します。
あとはjson_listdumpすればよいです。

Python

1import json 2import csv 3 4json_list = [] 5 6#元データを開く(test.csv) 7with open('test.csv', mode='r', encoding='utf-8') as rf: 8 reader = csv.reader(rf) 9 next(reader) 10 for line in reader: 11 id = int(line[0]) 12 name = line[1] 13 sizeW = line[2] 14 sizeH = line[3] 15 size = sizeW + ' ×' + sizeH 16 json_list.append( {'id':id, 'name':name, 'size':size}) 17 18#jsonデータを作成 19with open('test.json', 'w', encoding='utf-8') as f: 20 json.dump(json_list, f, indent=2, ensure_ascii=False)

投稿2021/06/21 06:23

can110

総合スコア38341

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

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

hihamo

2021/06/21 06:49

ご回答ありがとうございます! 数値のままjsonに変換できました。 このようにintを使って直接listを作成すれば良いのですね。 間に一旦csvを作成することも気になっていたので こちらも解決できて嬉しいです。ありがとうございました!
guest

0

csv.readerを使って読み込んだlineは文字列のリストです。
整数にしたければ組み込みクラスintを使って変換しましょう。

投稿2021/06/21 06:20

ppaul

総合スコア24670

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

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

hihamo

2021/06/21 06:49

ご回答ありがとうございます! 組み込みクラスint・・というのがあるのですね。 調べてみます。ありがとうございました。
guest

0

ダブルクォーテーションで囲むと文字列として扱われます。
数値として扱いたければダブルクォーテーションを外してください。

↓参考
https://www.tohoho-web.com/ex/json.html

投稿2021/06/21 06:12

yamap55

総合スコア1376

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

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

hihamo

2021/06/21 06:18

ご回答ありがとうございます。 csvからjsonに変換する際に、自動でダブルクォーテーションがついてしまうのですが これをつかない様にするにはどのようなコードにすれば良いのかわからずに質問させていただきました。 intを使うのかとも思ったのですが、どの段階で指定すればよいのか調べてもわからず 質問が見当違いでしたら申し訳ありませんが、教えていただければありがたいです。 よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問