#python #json #export-to-csv
Вопрос:
У меня есть JSONs, сообщающие о разных значениях, и я хочу импортировать только некоторые ключи в csv. Я попробовал 2 подхода, но оба дают мне некоторые проблемы. Сначала я попробовал это :
`import os,json
import glob
import csv
# Place your JSON data in a directory named 'data/'
src = "MYPATH"
data = []
json_pattern = os.path.join(src, '*.json')
# only json
files = glob.glob(json_pattern, recursive=True)
# Loop through files
for single_file in files:
with open(single_file, 'r') as f:
json_file = json.load(f)
try:
data.append([
json_file['name1'],
json_file['name2'],
json_file['name3'],
json_file['name4'],
])
except KeyError:
continue
# Add headers
data.insert(0, ['title_1', 'title_2', 'title_3'])
# Export to CSV.
# Add the date to the file name to avoid overwriting it each time.
csv_filename = 'name.csv'
with open((src csv_filename), "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(data)`
Таким образом, к сожалению, если ключ не включен, код полностью пропускает файл, в то время как я хочу, чтобы он пропускал только ключ.
Поэтому я попробовал это, вместо этого:
import os,json
import glob
import csv
# Place your JSON data in a directory named 'data/'
src = "MY_PATH"
data = []
json_pattern = os.path.join(src, '*.json')
# Change the glob if you want to only look through files with specific names
files = glob.glob(json_pattern, recursive=True)
# Loop through files
col_name = ['name1','name2','name4']
for single_file in files:
with open(single_file, 'r') as f:
json_file = json.load(f)
for key in col_name:
try:
data.append([json_file[key]])
except KeyError:
continue
# Add headers
data.insert(0, ['title_1', 'title_2', 'title_3'])
# Export to CSV.
# Add the date to the file name to avoid overwriting it each time.
csv_filename = 'name.csv'
with open((src csv_filename), "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(data)
Но в этом случае каждое значение представляет собой новую строку в csv, в то время как я хочу, чтобы значение каждого json было в одной строке.
Я не эксперт, и я действительно не знаю, как совместить эти два. Кто-нибудь может мне помочь? Спасибо!
Комментарии:
1. Не могли бы вы, пожалуйста, исправить отступ в вашем первом примере кода?
2. Не могли бы вы показать пример ввода json и ожидаемый csv?
3. К счастью, я нашел свое решение, но в следующий раз я буду более точным!
Ответ №1:
Если я правильно понимаю, что вы пытаетесь сделать, почему бы просто не сделать
# Loop through files
for single_file in files:
with open(single_file, 'r') as f:
json_file = json.load(f)
data.append([
json_file.get('name1', ''),
json_file.get('name2', ''),
json_file.get('name3', ''),
json_file.get('name4', '')
])
С помощью .get()
вы можете указать значение по умолчанию в случае, если ключ не найден.