Skip to content

将json输出为csv

使用csv

代码

python
import csv

def save_contents(file_path, data_array):
    with open(file_path, 'w', newline='', encoding='utf-8') as csvfile:
        spamwriter = csv.writer(csvfile, delimiter=',', quotechar='\t', quoting=csv.QUOTE_ALL)
        for i, data in enumerate(data_array):
            if i == 0:
                spamwriter.writerow(data.keys())
            spamwriter.writerow(data.values())
    print(f"[+] {len(data_array)+1} rows written on {file_path}")


json_data = [
    {'name': 'person2', 'age': 20, 'card_id': '34878347838282', 'number': '84723948724287847', 'country': 'usa'}, 
    {'name': 'person1', 'age': 35, 'card_id': '95864793980408', 'number': '68944837110437831', 'country': 'germany'}
]

save_contents("output.csv", json_data)
python
import csv
import re

def save_contents(file_path, data_array):

    def is_match_bignum(value):
        if isinstance(value, (int, float)):
            return True
        return isinstance(value, str) and re.match(r'^\d{1,}$', value)

    with open(file_path, 'w', newline='', encoding='utf-8') as csvfile:
        spamwriter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        for i, data in enumerate(data_array):
            if i == 0:
                spamwriter.writerow(data.keys())
            data_values = [f'\t{str(value)}\t' if is_match_bignum(value) else value for value in data.values()]
            spamwriter.writerow(data_values)
    print(f"[+] {len(data_array)+1} rows written on {file_path}")



json_data = [
    {'name': 'person2', 'age': 20, 'card_id': '34878347838282', 'number': '84723948724287847', 'country': 'usa', 'fe': '84723948724287847'}, 
    {'name': 'person1', 'age': 35, 'card_id': '95864793980408', 'number': '68944837110437831', 'country': 'germany', 'fe': '8472394872\n4287847'}
]

save_contents("output.csv", json_data)

使用pandas

代码

python
import pandas as pd
import csv

def save_contents(file_path, data_array):
    pd.json_normalize(data_array).to_csv(file_path, index=False, quotechar='\t', quoting=csv.QUOTE_ALL, sep=',')
    print(f"[+] {len(data_array)+1} rows written on {file_path}")


json_data = [
    {'name': 'person2', 'age': 20, 'card_id': '34878347838282', 'number': '84723948724287847', 'country': 'usa'}, 
    {'name': 'person1', 'age': 35, 'card_id': '95864793980408', 'number': '68944837110437831', 'country': 'germany'}
]

save_contents("output.csv", json_data)