实习工作小结·批量下载文件和批量写入elasticsearch

工作流程大致是先将文件下载下来,然后再解压。解压后的文件后缀是.xml,于是需要通过xml解析库解析出需要的数据,然后格式规整地写入elasticsearch。

首先,数据下载的网站地url是这样的:http://ftp.ncbi.nlm.nih.gov/pubmed/baseline/

这个目录下的文件名称格式也很整齐:pubmed22nXXXX.xml.gz,其中XXXX是他的编号,观察了下从1到1114为止。至此,我们的下载链接便是http://ftp.ncbi.nlm.nih.gov/pubmed/baseline/pubmed22nXXXX.xml.gz于是可以写出如下的for循环以得到我们需要的列表:

    address = []
    path1 = "pubmed22n"
    path2 = ".xml.gz"
    path = ''
    for i in range(408, 1115):
        if 0 < i <= 9:
            path = path1 + '000' + str(i) +path2
            address.append(path)
        elif 10 <= i <= 99:
            path = path1 + '00' + str(i) + path2
            address.append(path)
        elif 100 <= i <= 999:
            path = path1 + '0' + str(i) + path2
            address.append(path)
        else:
            path = path1 + str(i) + path2
            address.append(path)

至此,所有的文件的下载地址都放在了address列表之中。接着就是下载的步骤了,我们使用wget下载,然后用gzip命令进行解压,同时用logging库输出log,来告知我们下载到了哪个文件了。代码如下:

    logging.basicConfig()
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)

    # process the file
    for add in address:
        root_url = "http://ftp.ncbi.nlm.nih.gov/pubmed/baseline/"

        # download datas
        # print(f"{root_url}{add}")
        wget.download(f"{root_url}{add}")
        os.system("gunzip -d " + add)

        # load datas
        data = get_data(add)
        write_data(data)
        logger.info(add + f" finished!")

接着便是写入过程,我在先前的博客《近阶段学习和实习的小结(git、docker和elasticsearch的使用)》icon-default.png?t=M276https://blog.csdn.net/qq_41938259/article/details/123632158?spm=1001.2014.3001.5501中已经给出了get_data和write_data的具体实现了,这里不再赘述。

今天就写到这儿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TIM33470348

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值