首页 > 解决方案 > 使用 python 将 CSV 转换为 JSON 并使用分隔符“|”拆分 csv

问题描述

schoolname|category|gender|medium_of_inst|address|area|pincode|landmark
----------+----------+----------+----------+----------+----------+------
qqq|qqq|qq|aa|asd|wer|asd|wert
www|fgh|qq|aa|sg|wer|asd|wert
eee|fxg|qq|aa|axcvsd|wer|asd|wert

如何删除第二行并拆分“|” 并将其转换为 json

标签: pythonjsoncsv

解决方案


试试下面的代码。首先拆分字符串\n并删除第二行,然后拆分|。希望这会有所帮助。

import json

strings = '''schoolname|category|gender|medium_of_inst|address|area|pincode|landmark
----------+----------+----------+----------+----------+----------+------
qqq|qqq|qq|aa|asd|wer|asd|wert
www|fgh|qq|aa|sg|wer|asd|wert
eee|fxg|qq|aa|axcvsd|wer|asd|wert'''

json_file_name = 'test.json'

strings = strings.split('\n') #Split the string by newline \n
del strings[0] #Remove the heading columns
del strings[0] #Remove the string starts with ----------+
data = []

try:
  for string in strings:
    row = string.split('|') #Split and write to json 
    row_data = {};
    row_data['schoolname'] = row[0]
    row_data['category'] = row[1]
    row_data['gender'] = row[2]
    row_data['medium_of_inst'] = row[3]
    row_data['address'] = row[4]
    row_data['area'] = row[5]
    row_data['pincode'] = row[6]
    row_data['landmark'] = row[7]
    data.append(row_data)

  with open(json_file_name, 'w') as outfile:
    json.dump(data, outfile)

  #Use the below to read the file  
  with open(json_file_name) as file_object:
    # store file data in object
    data = json.load(file_object)
    print(data)

except Exception as e:
      print("Type error: " + str(e)) 

输出

[
  {
    'schoolname': 'qqq',
    'category': 'qqq',
    'gender': 'qq',
    'medium_of_inst': 'aa',
    'address': 'asd',
    'area': 'wer',
    'pincode': 'asd',
    'landmark': 'wert'
  },
  {
    'schoolname': 'www',
    'category': 'fgh',
    'gender': 'qq',
    'medium_of_inst': 'aa',
    'address': 'sg',
    'area': 'wer',
    'pincode': 'asd',
    'landmark': 'wert'
  },
  {
    'schoolname': 'eee',
    'category': 'fxg',
    'gender': 'qq',
    'medium_of_inst': 'aa',
    'address': 'axcvsd',
    'area': 'wer',
    'pincode': 'asd',
    'landmark': 'wert'
  }
]

推荐阅读