#json #python-3.x #operating-system #export-to-csv #glob
Вопрос:
Мой код считывает кучу файлов json из каталога, извлекает данные «частота» и «затухание» из этих файлов и записывает их в файл csv. Теперь я хочу сохранить этот csv-файл в другом каталоге. Код выполняется без каких-либо ошибок, но сохраняется в текущем каталоге. Может ли кто-нибудь помочь решить эту проблему?
import csv import glob import json import os site = 'alpha' frequency_to_check = '196050.000' json_dir_name = 'V:/temp/test/' json_pattern = os.path.join(json_dir_name, '*.json') total_files = glob.glob(json_pattern) atten = [] timestamp = [] save_path = 'V:/python/result/' if not os.path.isdir(save_path): os.makedirs(save_path) filename = f'{site}-{frequency_to_check}.csv' with open(filename, 'w', newline='') as csv_file: for file in total_files: with open(file) as json_file: output_json = json.load(json_file) for key in output_json: if key['start-freq'] == frequency_to_check: csv.writer(csv_file).writerow([key['start-freq'], key['attenuation']]) save_file = os.path.join(save_path, filename) csv_file.close() print(f'Total files processed {len(total_files)}')
Ответ №1:
Проблема, насколько я могу судить, заключается здесь :
csv.writer(csv_file).writerow([key['start-freq'], key['attenuation']])
csv_file-это ваш объект , который загружается в память, и каждый раз, когда выполняется эта строка, вы просто записываете строки в уже открытый файл. После этого вы просто создаете новый путь :
save_file = os.path.join(save_path, filename)
который на самом деле никогда не используется, когда вы тоже закрываете файл.
Чтобы исправить это, я бы посоветовал вам поместить save_path в файл csv :
import csv import glob import json import os site = 'alpha' frequency_to_check = '196050.000' json_dir_name = 'V:/temp/test/' json_pattern = os.path.join(json_dir_name, '*.json') total_files = glob.glob(json_pattern) atten = [] timestamp = [] save_path = 'V:/python/result/' if not os.path.isdir(save_path): os.makedirs(save_path) filename = f'{site}-{frequency_to_check}.csv' save_file = os.path.join(save_path, filename) with open(save_file, 'w', newline='') as csv_file: for file in total_files: with open(file) as json_file: output_json = json.load(json_file) for key in output_json: if key['start-freq'] == frequency_to_check: csv.writer(csv_file).writerow([key['start-freq'], key['attenuation']]) csv_file.close() print(f'Total files processed {len(total_files)}')
Я думаю, это должно сработать.