文件按关键字分组-切割-染色-写入excel

这篇具有很好参考价值的文章主要介绍了文件按关键字分组-切割-染色-写入excel。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 背景

        针对下面的文件data.csv,首先根据fid进行排序,然后分组,使相同fid的记录放到同一个excel文件中,并对每列重复的数据元素染上红色。

fid,user_id
-1000078398032092029,230410010036537520
-1000078398032092029,230423010026993942
-1000078398032092029,230505010027684603
-101241766345369238,210911010005526495
-101241766345369238,211017010017923011
-101241766345369238,230113010029633164
-101241766345369238,230514010028256452
-101241766345369238,230518010036813773
-1045165137456710,220401010038956742
-1045165137456710,220401010038956742
-1050918014514687463,210805010001898014
-1050918014514687463,210805010001898014
-111(手动添加一个结束标志)

2. 分组切割文件

import pandas as pd
pd.set_option('display.max_rows', None)

# 根据fid对文件进行分割,每个fid一个文件
def split_df_by_fid():
    df = pd.read_csv('data.csv', dtype=str)
    row_split_list = []  # 记录分割点索引
    current_fid = '-1000078398032092029'  # 第一个fid
    start = 0
    end = start
    cnt = 1  # 记录当前是第几个分割子文件
    for fid in df['fid']:
        if fid != current_fid:
            row_split_list.append((start, end))
            # 当前fid组写入一个新文件
            df[start:end].to_csv('data_split/' + str(cnt) + '.csv', index=0)
            cnt += 1
            current_fid = fid
            start = end
        end += 1
    print("总文件数: ", len(row_split_list))
    print(row_split_list)
    # [(0, 3), (3, 8), (8, 10), (10, 12)]

输出

文件按关键字分组-切割-染色-写入excel,python,excel,python

3. 染色-写入excel

1. 找到同列重复元素

def group_by_find_duplicate_values(group_df: pd.DataFrame, col: str) -> list:
    value_counts = group_df[col].value_counts().reset_index()
    return value_counts[value_counts[col] > 1]['index'].to_list()

2. 插入图片

def inset_a_img(row_index, col_index, img_name):
    image_path = os.path.join("data_img/", img_name.replace('/', '_'))
    h, w, *_ = cv2.imread(image_path).shape
    scale = CEIL_HEIGHT * 1.3 / h
    SHEET.insert_image(row_index, col_index, image_path,  # x_offset可调整x轴图片偏移
                       {'x_offset': 0, 'y_offset': 0, 'x_scale': scale, 'y_scale': scale, 'positioning': 1})

3. 同列相同元素染色

# -*- coding: utf-8 -*-
import os
import cv2
import tqdm
import pandas as pd
import xlsxwriter
CEIL_HEIGHT = 156

def write_color():
    df = pd.read_csv(input_file, dtype=str)
    for i, col in enumerate(df.columns):
        SHEET.write(0, i, col)  # 第0行第i列插入表头字段
    try:
        for i, line in tqdm.tqdm(enumerate(df.itertuples())):  # tqdm: 显示进度条
            temp_df = df[df['fid'] == line.fid]
            for j, col in enumerate(df.columns):
                duplicate_values = group_by_find_duplicate_values(temp_df, col)
                content = str(df.iloc[i, j])
                # 染色
                cell_format = BOOK.add_format({'font_color': 'red' if (content in duplicate_values and j > 0) else 'black'})
                if col not in ('face_path', 'ocr_path'):
                    # SHEET.write(*(i + 1, j), content, cell_format)
                    SHEET.write(i+1, j, content, cell_format)
                else:
                    if col == 'face_path' and not pd.isna(line.face_path):
                        inset_a_img(i+1, j, line.face_path)  # 为Nan的置空,不写入图片
                    if col == 'ocr_path' and not pd.isna(line.ocr_path):
                        inset_a_img(i+1, j+1-1, line.ocr_path)
        BOOK.close()
    except Exception as e:
        print(e)


if __name__ == '__main__':
    for file in os.listdir('data_split'):
        input_file = 'data_split/' + file
        output_file = 'data_split_xlsx/' + file.replace('csv', 'xlsx')
        BOOK = xlsxwriter.Workbook(output_file)
        SHEET = BOOK.add_worksheet('sheet1')
        SHEET.set_default_row(CEIL_HEIGHT)
        SHEET.set_column(0, 60, 25)  # 分别为要修改的起始列,终止列,设置的列宽
        write_color()

输出

文件按关键字分组-切割-染色-写入excel,python,excel,python

文件按关键字分组-切割-染色-写入excel,python,excel,python文章来源地址https://www.toymoban.com/news/detail-613896.html

到了这里,关于文件按关键字分组-切割-染色-写入excel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用VSCode在文件中查找关键字

    在使用VSCode编辑器时,经常需要在文件中查找特定的或文本。VSCode提供了强大的搜索功能,可以帮助我们快速定位并找到所需的内容。本文将介绍如何在VSCode中进行搜索。 在VSCode中查找的方法如下: 打开目标文件:首先,打开你想要在其中进行搜

    2024年02月04日
    浏览(45)
  • 使用less命令搜索文件中的关键字

    less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。 语法 less [参数] 文件 参数说明: -b 缓冲区大小 设置缓冲区的大小 -e 当文件显示结束后,自动离开 -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 -g 只标志最后搜索的关键

    2024年02月12日
    浏览(36)
  • linux如何查询目录文件中是否包含某个关键字

    在 Linux 系统中,可以使用 grep 命令来查询目录文件中是否包含某个。 例如,如果你想查询当前目录下的所有文件中是否包含 \\\"keyword\\\",可以使用以下命令: 在这个命令中, . 表示当前目录, -r 表示递归地搜索目录下的所有文件。 如果有任何文件包含 \\\"k

    2024年02月11日
    浏览(38)
  • Linux命令_grep & 快速查找关键字、文件名

    目录 1. 语法 1.1. 常用参数 2. 常见用法 2.1. 查找 2.2. 取反 2.3. 额外输出上下 2 行 2.4. 额外输出上面 1 行 2.5. 额外输出下面 1 行 2.6. 输出总行数 2.7. 输出行号 2.8. 忽略大小写 2.9. 正则匹配 3.组合使用 4. 文本三剑客其他命令                  

    2024年01月17日
    浏览(50)
  • linux如何查询某个关键字所处在哪个文件夹的哪个文件下

    linux如何查询某个所处在哪个文件夹的哪个文件下 linux如何查询文件夹中的某个文件中的 你要知道是什么 在 Linux 中,可以使用 grep 命令来查询文件夹中的某个文件中的。 grep 命令的语法格式如下: 其中,OPTIONS 是可选的命令选项,PATTERN 是需要搜索

    2024年02月09日
    浏览(37)
  • linux通过grep根据关键字查找日志文件上下文

    grep -C 10 keyword catalina.out 显示file文件中匹配keyword字串那行以及上下10行 grep -B 10 keyword catalina.out 显示keyword及前10行 grep -A 10 keyword catalina.out 显示keyword及后10行 grep -C 10 keyword catalina.out aaa.txt grep -o keyword catalina.out | wc -l grep -c keyword catalina.out grep -V

    2024年02月16日
    浏览(37)
  • Java文件操作(遍历目录中的文件,找到并删除有指定关键字的文件)

    对于通过java对文件继续读取和写入的操作推荐看读取文件和写入文件操作         扫描指定目录中的文件,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件         实际上题目就要求我们对一个指定的目录下的文件进行遍历

    2024年02月13日
    浏览(37)
  • 文件名替换,关键字替换改名:不同路径中的多个文件如何批量重命名

    在日常生活和工作中,我们经常需要处理大量的文件,包括重命名、分类、整理等操作。其中,批量重命名不同路径中的多个文件是一项非常常见的任务。本文将介绍云炫文件管理器常见的批量重命名方法:文件名替换改名,帮助您轻松应对不同路径中的多个文件的重

    2024年02月08日
    浏览(57)
  • python读取.txt文件中某些关键字后面的内容 并根据该数据画图

    感谢一下悦姐帮忙 然后画图,其实两个代码可以放在一个里面 最后贴个图:

    2024年02月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包