gpt4 book ai didi

python - Errno 24 附加到大型 CSV 文件时打开的文件太多

转载 作者:太空宇宙 更新时间:2023-11-04 09:13:17 25 4
gpt4 key购买 nike

我正在从数据库中提取一些有关基因的信息,在进行一些修改后将其存储在字典中,并将其附加到 CSV 文件中。

基因总数为 489299,所以最后我将得到一个包含 489299 行的 csv 文件,当我在 10000 个基因上测试时脚本运行顺利,但在 489299 的情况下我得到了错误:

OSError: [Errno 24] Too many open files: 'output_agrold/Genes.csv'

这是我正在使用的代码片段:

# I have batches of Genes
batches = ["Gene1 Gene2...", "Gene11 Gene12..."]
for batch in batches:
genes_batch_dico = create_genes_info_dico(batch)
# genes_batch_dico is a List of dictionnaries which has info about genes
# genes_batch_dico = [{info about gene1}, {info about gene2}, ...]
for gene_dico in genes_batch_dico:
# I get info from gene_dico : gene_id, start_pos, end_pos .....
# here I create the CSV file
with open(OUTPUT_PATH + '/Genes.csv', 'a') as f:
w = csv.writer(f, delimiter=',', quoting=csv.QUOTE_ALL, quotechar='\"')
row = [ gene_id, start_pos, end_pos .... ]
w.writerow(row)

我查看了我在CSV文件中得到的行数,是52800行。

当我在互联网上查看时,我发现这个错误是由于同时打开许多文件(我想我在这里没有这样做,我的意思是我只是在一个文件上添加/附加)他们建议使用 ulimit -n NUMBER 命令修改打开文件的最大数量,所以我将 open files 从 1024 增加到 4096。但我仍然得到当行数恰好达到 52800 行时,同样的错误。

操作系统:Fedora 28。

最佳答案

假设您使用的是 Python 3.x,您只需打开一次 CSV 文件即可写入。目前,您正在为您编写的每一行以追加模式打开和关闭它一次。

您需要的更好的伪代码是:

import csv
import os

batches = ["Gene1 Gene2...", "Gene11 Gene12..."]

with open(os.path.join(OUTPUT_PATH, 'Genes.csv'), 'w', newline='') as f:
w = csv.writer(f, delimiter=',', quoting=csv.QUOTE_ALL, quotechar='\"')

for batch in batches:
genes_batch_dico = create_genes_info_dico(batch)

for gene_dico in genes_batch_dico:
row = [ gene_id, start_pos, end_pos .... ]
w.writerow(row)

os.path.join() 是一种将文件路径的各个部分连接在一起的更安全的方法。

如果您仍在使用 Python 2.x,请更改此行:

with open(os.path.join(OUTPUT_PATH, 'Genes.csv'), 'wb') as f:

关于python - Errno 24 附加到大型 CSV 文件时打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52054973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com