根据excel中的dtData对cnki文件夹里的pdf进行分类(利用pd)

根据excel中的dtData对cnki文件夹里的pdf进行分类(利用pd)

  • 1. 任务要求
  • 2. 代码过程中遇到的实际问题
  • 3. 主要代码
    • Step 1 读取excel里的dtData,将title分别写入zf.csv,bl.csv,jx.csv三个csv文件
    • Step 2 读取三个csv文件获取三个批次的title;读取cnki文件夹里的文件名称,分别与三个批次的title进行匹配;从cnki移动pdf文件到相应文件夹
            • 代码过程所需要的包

1. 任务要求

  1. 5.16号以前的全文------作废
  2. 5.16号~7.31号全文----保留
  3. 8.1号以后全文-------急需

2. 代码过程中遇到的实际问题

  1. pdf下载时名称因字符太长有截取现象,解决:匹配时模糊匹配
  2. pdf实际下载的名称有的无一些符号,即符号不一致,解决:字符串去除符号
  3. pdf实际名称大小写与文档不一致,解决:统一小写或大写

3. 主要代码

Step 1 读取excel里的dtData,将title分别写入zf.csv,bl.csv,jx.csv三个csv文件

df = pd.read_excel('预研综述和正例.xlsx', sheet_name='Sheet1')
# 构建三个list存储title
zf_list = []
bl_list = []
jx_list = []

for i in range(1, df.shape[0]):   # 从 1 开始忽略列表行

    try:
        # 每一行是一个Series,对Series操作与dic类似
        j = df.iloc[i] 
        dtDate = j['dtDate']
        # 统一小写
        title = j['title'].lower()  
        
        if dtDate <= '2019-05-16':
            zf_list.append(title)
        elif dtDate <= '2019-08-01':
            bl_list.append(title)
        else:
            jx_list.append(title)
    except:
        print('get title erro')
        
# list转dataframe
df_zf = pd.DataFrame(zf_list, columns=['title'])
df_bl = pd.DataFrame(bl_list, columns=['title'])
df_jx = pd.DataFrame(jx_list, columns=['title'])
# 保存到本地csv,参数index表示是否保留序号列
df_zf.to_csv("zf.csv", encoding='utf_8_sig', index=False)
df_bl.to_csv("bl.csv", encoding='utf_8_sig', index=False)
df_jx.to_csv("jx.csv", encoding='utf_8_sig', index=False)

Step 2 读取三个csv文件获取三个批次的title;读取cnki文件夹里的文件名称,分别与三个批次的title进行匹配;从cnki移动pdf文件到相应文件夹


# 读取csv文件,usecols参数代表读取第几列,注意类型必须为list
zf_title = pd.read_csv('zf.csv', usecols=[0])
bl_title = pd.read_csv('bl.csv', usecols=[0])
jx_title = pd.read_csv('jx.csv', usecols=[0])

# 读取文件夹里的文件名称
dir = os.path.dirname(os.path.realpath(__file__))
pdf_list = os.listdir(dir + '\cnki')
for pdf in pdf_list:

    print('current task is %s' % pdf)

    oldfile = dir + '\\cnki\\' + pdf
    # os.path.splitext()分离文件名与后缀名,文件名进行小写处理
    title = os.path.splitext(pdf)[0].lower()  
    # 特殊字符替换
    title = title.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", "")
    # 进行三个循环,看此pdf属于哪个批次
    try:
        for zf in zf_title.values:
            if title in zf[0]:
                newfile = dir + '\\zf\\' + pdf
                shutil.copyfile(oldfile, newfile)  # copy
                shutil.move(oldfile, newfile)  # move
    except:
        pass

    try:
        for bl in bl_title.values:
            if title in bl[0]:
                newfile = dir + '\\bl\\' + pdf
                shutil.copyfile(oldfile, newfile)  # copy
                shutil.move(oldfile, newfile)  # move
    except:
        pass

    try:
        for jx in jx_title.values:
            if title in jx[0]:
                newfile = dir + '\\jx\\' + pdf
                shutil.copyfile(oldfile, newfile)  # copy
                shutil.move(oldfile, newfile)  # move
    except:
        pass
        
print('This task is finished')
代码过程所需要的包
import pandas as pd
import shutil
import os

你可能感兴趣的:(python,临时任务)