2016-05-16 62 views
3

我继续做东西的时候像这样得到一个“打开的文件太多”错误:熊猫read_json打开的文件太多错误

# read file names 
file_names = [] 
for file_name in os.listdir(path): 
    if '.json' not in file_name: continue 
    file_names.append(file_name) 

# process file names... 

# iter files 
for file_name in file_names: 

    # load file into DF 
    file_path = path + '/' + file_name 
    df = pandas.read_json(file_path) 

    # process the data, etc... 
    # not real var names, just for illustration purposes... 

    json_arr_1 = ... 
    json_arr_2 = ... 

    # save DF1 to new file 
    df_1 = pandas.DataFrame(data=json_arr_1) 
    file_name2 = os.getcwd() + '/db/' + folder_name + '/' + file_name 
    df_1.to_json(file_name2, orient='records') 

    # save DF2 to new file 
    df_2 = pandas.DataFrame(data=json_arr_2) 
    file_name3 = os.getcwd() + '/db/other/' + folder_name + '/' + file_name 
    df_2.to_json(file_name3, orient='records') 

的DF文件没有提到必须处理打开或关闭的文件和我不要以为listdir会保留指向打开文件的指针(应该只返回一个字符串列表)。

我哪里错了?

+0

在哪一点你会得到错误?有一些文件已经被处理了吗?也许'file_names'包含一些带有通配符的路径? – dukebody

+0

第二个文件被处理后崩溃。只有.json文件在该文件夹中。 –

回答

1

这似乎是一个系统问题,而不是熊猫问题。

您可能需要增加系统中打开文件的数量。

如何增加数: https://easyengine.io/tutorials/linux/increase-open-files-limit/

以下的问答&答: IOError: [Errno 24] Too many open files: 有关的ulimit,打开文件的

这个问答&一个讨论有关在Linux中打开文件数量的限制讨论: https://unix.stackexchange.com/questions/36841/why-is-number-of-open-files-limited-in-linux

+0

但是文件名的数量可能会有所不同,所以这可能发生在n个文件*(1读+2节省)。如果限制为3或者应该限制为n * 3?但如果我提前不知道,我不能设定限制。 –

+0

程序中有多少个文件正在打开?对于“正常”操作,系​​统限制应足够高 – Yaron

+0

这就是我的问题......我是否打开3个以上?我想我只是开放3,1阅读json,2写json。所以总数为3.但是,如果熊猫没有在每个循环中释放文件,它将会是3+ ... –

相关问题