Python: условное объединение данных из двух файлов JSON в один файл CSV - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь объединить два разных файла с разным количеством записей. Первые 150 записей должны быть исключены из каждого файла, а следующие 400 записей из каждого файла должны быть объединены в один файл. С моим ограниченным знанием Python написанная мною программа идет бесконечным циклом. Входные файлы представлены в формате json, а выходной файл - в формате csv. Ниже я попробовал вместе с примерами входных файлов данных.

import math
import json

#Acc code begin
fp=open("sitting.csv","w")
activity="sitting"
count=0
while count<650:
   with open("acc.json") as data_file:

      my_list1 = [json.loads(line) for line in data_file]

   for acce in my_list1:
       Xaxis = float(format(float(acce['dataX']),'.4f'))
       Yaxis = float(format(float(acce['dataY']),'.4f'))
       Zaxis = float(format(float(acce['dataZ']),'.4f'))


       #Gyro code
   with open("gyro.json") as data_file2:

      my_list2 = [json.loads(line) for line in data_file2]

   for gyro in my_list2:
       pitch=float(format(float(gyro['dataX']),'.4f'))
       roll=float(format(float(gyro['dataY']),'.4f'))
       yaw=float(format(float(gyro['dataZ']),'.4f'))

# Start writing total 400 records in file starting from 150 records onwards        
if count>150:
   print activity,",",Xaxis,",",Yaxis,",",Zaxis,",",pitch,",",roll,",",yaw
   print>>fp,activity,",",Xaxis,",",Yaxis,",",Zaxis,",",pitch,",",roll,",",yaw

count=count+1
fp.close()
print "Combined File Created"

Мои фактические входные наборы данных acc.json и gyro.json

https://drive.google.com/file/d/1kKez7DCVT-jL5NT3qlP_Xj8xm1oGq0x5/view?usp=sharing

https://drive.google.com/file/d/1zgExiiiDaLP1Hoa0wRGOfvljUQHj6Jko/view?usp=sharing

Пожалуйста, помогите, а также предложите, если возможно уменьшить код.

1 Ответ

1 голос
/ 23 мая 2019

Я не был уверен в твоих намерениях и каждом шаге, который ты сделал, но я попытался упростить и решить основные проблемы. Во-первых, отступ означал, что count не будет увеличиваться в цикле while. Во-вторых, вещи, которые должны были когда-то произойти, должны выйти из цикла while. Также я использовал slice, чтобы избавиться от ненужных частей линейных массивов. Но я думаю, что вы хотели получить 3 элемента из каждого массива для каждой записи, поэтому я не мог использовать цикл for для печати. также печать должна происходить внутри цикла. Кроме того, онлайн-компилятор, который я использовал, требовал скобок вокруг аргументов для печати. Дайте мне знать, если это нужно настроить, но если я вас правильно понял, это должно сработать (при условии, что вы довольны вашими кусочками, я не изменился).

import math
import json

#Acc code begin
fp=open("sitting.csv","w")
activity="sitting"
with open("acc.json") as data_file:
    my_list1 = [json.loads(line) for line in data_file]
my_list1 = my_list1[150 : 550]
with open("gyro.json") as data_file2:
    my_list2 = [json.loads(line) for line in data_file2]
my_list2 = my_list2[150 : 550]
count = 1
while count <=400:

    acce = my_list1[count]
    Xaxis = float(format(float(acce['dataX']),'.4f'))
    Yaxis = float(format(float(acce['dataY']),'.4f'))
    Zaxis = float(format(float(acce['dataZ']),'.4f'))

    gyro = my_list2[count]
    pitch=float(format(float(gyro['dataX']),'.4f'))
    roll=float(format(float(gyro['dataY']),'.4f'))
    yaw=float(format(float(gyro['dataZ']),'.4f'))

# Start writing total 400 records in file starting from 150 records onwards        
    print (activity,",",Xaxis,",",Yaxis,",",Zaxis,",",pitch,",",roll,",",yaw)
    print>>fp(activity,",",Xaxis,",",Yaxis,",",Zaxis,",",pitch,",",roll,",",yaw)
    count=count+1

fp.close()
print ("Combined File Created")
...