Python读rar/zip文件

最近要做论文分享,为了不跟实验室之前分享的论文冲突,我需要知道之前都有分享过了哪些论文,然而之前居然没有整理一个已分享论文的列表,只有一堆压缩包,我只能把它们都下载下来,一个一个看看都有哪些论文。

既然这样,为什么不写个脚本自动读出来呢?

刚开始写,我就遇到了个问题,怎么读rar和zip文件?年纪大了,不把这些代码片段记下来,就得每次都google,那就真的是"google工程师"了。

读rar文件

首先,得安装unrar,以mac电脑为例

brew install unrar

再安装python包:

pip install unrar

然后是这样读取:

from unrar import rarfile
def get_rar_dir(rar_file_path):
    '''获取rar压缩文件夹dir'''
    rar = rarfile.RarFile(rar_file_path)
    rar_dir = rar.namelist()
    return rar_dir

读zip文件

安装python包:

pip install zipfile37

然后是这样读取:

import zipfile
def get_zip_dir(zip_file_path):
    '''获取zip压缩文件夹dir'''
    _zip = zipfile.ZipFile(zip_file_path)
    zip_dir = _zip.namelist()
    return zip_dir

最后,完整的读取已分享论文的代码是:

from unrar import rarfile
from os import path
from glob import glob
import os
import zipfile
def get_rar_dir(rar_file_path):
    '''获取rar压缩文件夹dir'''
    rar = rarfile.RarFile(rar_file_path)
    rar_dir = rar.namelist()
    return rar_dir
def get_zip_dir(zip_file_path):
    '''获取zip压缩文件夹dir'''
    _zip = zipfile.ZipFile(zip_file_path)
    zip_dir = _zip.namelist()
    return zip_dir
dir_path = './'
all_files = []
for d in glob(os.path.join(dir_path, '*.rar')):
    rar_files = get_rar_dir(d)
    all_files.extend(rar_files)
for d in glob(os.path.join(dir_path, '*.zip')):
#     print(d)
    zip_files = get_zip_dir(d)
    all_files.extend(zip_files)
for f in all_files:
    if '.pdf' in f:
        print(f[f.find('/') + 1:])