2016-05-16 60 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+ ... –

相關問題