工作流程大致是先将文件下载下来,然后再解压。解压后的文件后缀是.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的使用)》https://blog.csdn.net/qq_41938259/article/details/123632158?spm=1001.2014.3001.5501中已经给出了get_data和write_data的具体实现了,这里不再赘述。
今天就写到这儿。
|