2017-01-25 8 views
-2

テキストファイルの文字列をJSON形式に変換する際に問題が発生しています。今私は3つのテキストファイルがあり、各ファイルにはJSON形式に変換したいファイルのオブジェクトの行がたくさんあります。下図のようにテキストファイルのコンマで区切られた文字列をJSONに変換する

文字列は、セミコロンで区切られています。

mary; 24; female;1993; student 
john; 21; male; 1982; student 
luke; 22; male; 1988; student 

私はJSON形式にこれらを変換する方法を教えてください。

json.loads()を使ってみましたが、動作しませんでした。あなたの助けは大変感謝しています。

+1

あなたのJSONの構造は何ですか? 'json.loads()'は、データが標準のJSON形式である場合に役立ちます。ファイル形式は 'csv'に似ていますが、' json.loads() 'はここでは意味がありません – ZdaR

+0

結果JSONをどのようなデータ構造で表現したいのですか?文字列のリスト? –

答えて

4

テキストファイルがJSONフォーマットでないため、json.loads()は機能しません。

$ cat a.txt 
mary; 24; female;1993; student 
john; 21; male; 1982; student 
luke; 22; male; 1988; student 

$ cat a.py 
import json 
arr = [] 
with open('a.txt', 'r') as f: 
    for line in f: 
     # split around semicolon and then strip spaces from the ends 
     fields = map(lambda s: s.strip(), line.split(';')) 
     arr.append({ 
      "name": fields[0], 
      "age": int(fields[1]), 
      "gender": fields[2], 
      "year": int(fields[3]), 
      "occupation": fields[4], 
     }) 
print json.dumps(arr, indent=2) 

$ python a.py 
[ 
    { 
    "gender": "female", 
    "age": 24, 
    "occupation": "student", 
    "name": "mary", 
    "year": 1993 
    }, 
    { 
    "gender": "male", 
    "age": 21, 
    "occupation": "student", 
    "name": "john", 
    "year": 1982 
    }, 
    { 
    "gender": "male", 
    "age": 22, 
    "occupation": "student", 
    "name": "luke", 
    "year": 1988 
    } 
] 

私は(この場合は、辞書のリスト)Pythonのデータ構造からJSONでエンコードされた文字列を取得するためにjson.dumps()を使用ここで、このような何かをJSONに変換助けることができます。

+1

辞書一覧* –

+0

ああ、はい。もちろん、申し訳ありません。 ) – Vlad

+0

私は試しましたが、私はこのエラーがあります:記述子 'strip'は 'str'オブジェクトを必要としますが、 'unicode'を受け取った – purplewind

0

データの各行に文字区切り値が含まれているように見えるので、Python csvモジュールを使用すると論理的に読み取ることができます。特にcsv.DictReaderは各行を辞書として返すので、そのデータをJSON形式に変換します。

import csv 
import json 
import sys 

def open_csv(filename, mode='r'): 
    """Open a csv file in proper mode depending on Python verion.""" 
    return(open(filename, mode=mode+'b') if sys.version_info[0] == 2 else 
      open(filename, mode=mode, newline='')) 

json_objects = [] 
fields = 'name age gender year occupation'.split() 
with open_csv('records.txt', 'r') as file: 
    reader = csv.DictReader(file, fieldnames=fields, delimiter=';', skipinitialspace=True) 
    for row in reader: 
     json_objects.append(row) 

print(json.dumps(json_objects)) 

出力:

[{"gender": "female", "age": "24", "occupation": "student", "name": "mary", "year": "1993"}, {"gender": "male", "age": "21", "occupation": "student", "name": "john", "year": "1982"}, {"gender": "male", "age": "22", "occupation": "student", "name": "luke", "year": "1988"}]

関連する問題