файл csv не сохраняется в другом каталоге в python

#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)}')  

Я думаю, это должно сработать.