python里面查找赋值,如何可以在剩余未空值的行里面进行进一步的筛选呢?

我有一份excel,A列是标题,带有xlsx、pdf、jpg等二十种格式,或者标题带有microsoft word、excel、powerpoint等N种字样,我希望凡是在A列里查找出含有xlsx字样的,就在同一行的B列赋值“excel”,然后,在【剩余】B列赋值为空的行里面,继续在A列查找带有jpg字样的,同样在B列赋值为“图片”,如此类推。
但是我发现在python立面用str.contains语句,假设A列里含有两个关键词,后一次赋值会把前一次赋的值覆盖掉。
举个例子:
第一次查找赋值的时候查找的关键字为pdf,查到A列有关键字pdf,于是在B列赋值pdf

AB
标题格式
图片.pdfpdf

但是第二次查找关键字为图片的时候,刚好A列的标题里面带有关键字【图片】,于是原来B列的值pdf被覆盖为图片

AB
标题格式
图片.pdf图片

有没有什么办法可以筛选赋值完一遍之后,剩余的操作是在B为空值的行来继续查询的呢?

import pandas as pd

if __name__ == '__main__':
    # 规则字典,什么要替换成什么
    rule = {'xls': 'excel', 'pdf': 'pdf', 'doc': 'word', 'word': 'word', 'acrobat': 'pdf', 'ppt': 'ppt',
            'powerpoint': 'ppt', 'csv': 'excel', '照片': '图片', '截图': '图片'}
    df = pd.read_excel("xx.xlsx")
    df['打印文件名称'] = df['打印文件名称'].astype(str)
    for i, r in df.iterrows():
        suffix = r['打印文件名称'].split(".")[-1]
        if suffix in rule:
            # 有后缀,直接替换
            df.loc[i, '格式'] = rule[suffix]
        else:
            # 没有后缀
            for key in rule:
                if key in r['打印文件名称']:
                    df.loc[i, '格式'] = rule[key]
                    break
    print(df)
  1. 你都能读取列A的值,那就再把列B的值读取下呗,如果列B为空不处理就可以了吧?
  2. 或者你给B列单元格赋值前判断下是否不为空再填充就可以了吧
import openpyxl

workbook = openpyxl.load_workbook('test.xlsx')
ws = workbook.worksheets[0]
for index, item in enumerate(ws.values, 1):
    if index == 1 or item[1] is not None:
        continue
    else:
        if 'pdf' in item[0]:
            ws.cell(index, 2).value = 'pdf'
        elif '图片' in item[0]:
            ws.cell(index, 2).value = '图片'
workbook.save('test.xlsx')

读取,遍历,判断
三板虎搞定。

有疑问来交流

用pandas库,你去搜pandas读取excel,还有基础操作,很简单