每次计数器达到一定数量时自动将输出保存到新的Json文件中Python

问题描述

我有几个文件夹,每个文件夹包含几个CSV文件,这些文件具有大量的行和列。我正在尝试将CS​​V文件中的某些列连接到JSON文件。当我的代码通过100个以下CSV文件文件夹时,我的代码运行良好。如果我尝试提交的文件超过100个,则代码会变得非常缓慢,并且在添加几个文件后卡住了。

我创建了具有4个数据框的模拟数据,这些数据框复制了我的原始数据:

import pandas as pd
import numpy as np
import glob

data_1 = {'host_identity_verified':['t','t','t'],'neighbourhood':['q','q','q'],'neighbourhood_cleansed':['Oostelijk Havengebied - Indische Buurt','Centrum-Oost','Centrum-West','Oostelijk Havengebied - Indische Buurt','Centrum-West'],'neighbourhood_group_cleansed': ['NaN','NaN','NaN'],'latitude':[ 52.36575,52.36509,52.37297,52.38761,52.36719,52.36575,52.36719]}

data_2 = {'host_identity_verified':['t','neighbourhood':['w','w','w'],52.36719]}

data_3 = {'host_identity_verified':['t','neighbourhood':['NaN','Chicago,US',US'],52.36719]}

data_4 = {'host_identity_verified':['t',52.36719]}


df_1 = pd.DataFrame(data_1)
df_2 = pd.DataFrame(data_2)
df_3 = pd.DataFrame(data_3)
df_4 = pd.DataFrame(data_4)

df_list_1 = []
df_list_2 = []
df_list_3 = []
df_list_4 = []

df_list_1.append(df_1)
df_list_2.append(df_2)
df_list_3.append(df_3)
df_list_4.append(df_4)

df_all = df_list_1 + df_list_2 + df_list_3 +df_list_4
count = 0
li = []
for df in df_all:
    count = count +1
    print(count)
    if count < 3:
        df_n = df
        li.append(df_n)
        frame_1 = pd.concat(li,axis=0,ignore_index= True)

        def Get_Columns(file_name):
            return file_name[['host_identity_verified','latitude']]


        concat_data_1 = Get_Columns(frame_1)
        with open('Booking_Data_%s.json' % count,'w') as outfile:
            concat_data_j_1 = concat_data_1.to_json()
            outfile.write(concat_data_j_1)

如您所见,为了获得x个要串联并保存到JASON文件中的文件,我将不得不通过编写许多elif语句来手动执行此操作。我的文件夹中的文件少于900个,因此我必须编写19种条件才能将每个50个CSV文件保存到JSON文件中。

因此,我想缩短代码长度,并在每次计数器达到20的倍数时自动输出保存到新的JSON文件中。将前20个保存在文件中,然后将20保存在文件中,依此类推。

例如,我的文件夹中有58个文件。如果我想将每20个文件保存在一个JSON文件中,则必须有3个JSON文件,前2个具有20 CSV,最后一个具有18 CSV。

此外,由于JSON文件太大,我将在分析它们时遇到问题吗?这是保存大数据的最佳文件类型吗?我们正在谈论的是每个文件中将近百万行,如果不是更多,则具有数百MB的大小。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)