python日常文件操作

本文章用意为方便日后写代码时随时复制粘贴,

如有问题或有更好的方法时请大家随时指正更新。

一、xlsx表格保存追加操作

import openpyxl


def xlsx_add_info_Method_one():
    """
    方法1.使用append
    追加写入1行数据
    :return:
    """
    # 指定文件路径
    file_full_path = r'test.xlsx'
    # sheet名称
    sheet_name = 'sample1'
    # 获取指定的文件
    wb = openpyxl.load_workbook(file_full_path)
    # 获取指定的sheet
    ws = wb[sheet_name]
    # 获得最大行数
    max_row_num = ws.max_row
    # 获得最大列数
    max_col_num = ws.max_column
    # 将当前行设置为最大行数
    ws._current_row = max_row_num
    # 使用append方法,将行数据按行追加写入
    values = ['Jack', '12', '2023/11/12', 'Failed']
    ws.append(values)
    # 保存文件
    wb.save(file_full_path)


def xlsx_add_info_Method_two():
    """
    方法2.使用for循环
    追加写入1行数据
    :return:
    """
    # 指定文件路径
    file_full_path = r'test.xlsx'
    # sheet名称
    sheet_name = 'sample1'
    # 获取指定的文件
    wb = openpyxl.load_workbook(file_full_path)
    # 获取指定的sheet
    ws = wb[sheet_name]
    # 获得最大行数
    max_row_num = ws.max_row
    # 获得最大列数
    max_col_num = ws.max_column
    values = ['Lisa', '35', '2023/11/27', 'Passed']
    # 追加一行数据
    for i in range(1, max_col_num + 1, 1):
        ws.cell(max_row_num + 1, i).value = values[i - 1]
    # 保存文件
    wb.save(file_full_path)


def xlsx_add_info_Method_three():
    """
    追加写入1列数据
    :return:
    """
    # 指定文件路径
    file_full_path = r'test.xlsx'
    # sheet名称
    sheet_name = 'sample2'
    # 获取指定的文件
    wb = openpyxl.load_workbook(file_full_path)
    # 获取指定的sheet
    ws = wb[sheet_name]
    # 获得最大行数
    max_row_num = ws.max_row
    # 获得最大列数
    max_col_num = ws.max_column
    values = ['Jack', '17', '2023/10/2', 'Failed']
    for each in values:
        # 通过row关键字指定行,colunm关键字指定列,均从1开始
        ws.cell(row=values.index(each) + 1, column=max_col_num + 1, value=each)
    # 保存文件
    wb.save(file_full_path)


'''使用openpyxl处理单元格数据时,起始坐标从(1,1)开始,不是(0,0)。'''


workbook = load_workbook(filename='test.xlsx')  # 打开表
sheet = workbook.active  # 获取xlsx的工作表
ws = workbook[workbook.sheetnames[0]]  # 获取第一个工作表
all_values = [[cell.value for cell in row] for row in sheet.rows]  # 获取表格数据

def query_xlsx(ids, column, success_text):
    """
    更改xlsx表的信息
    :param ids: 需要更改的用户id
    :param column: 第几列
    :param success_text: 需要在指定列填入的数据
    :return:
    """
    nums = 0
    for row in all_values:
        nums += 1
        row_id = row[0]
        if row_id == ids:
            ws.cell(row=nums, column=column, value=success_text)  # row为行数, column为列数
            workbook.save(filename=task_path)  # 保存更改信息
            workbook.close()  # 对程序中只读的workbook
            return True


二、日志操作

from loguru import logger


logger.add(
    "./日志/log.log",
    rotation='10MB',  # 日志分割,可以根据时间也可以根据大小
    colorize=False,  # 是否染色
    level='WARNING'  # 日志等级
)

logger.warning('测试')
logger.debug('测试')
logger.success('测试')

三、多线程操作

我个人不喜欢用消息队列,所以自己经常使用这种方式使用多线程

import threading


def parse(txt):
    print(f'{txt}')


def parse_main(txt_list):
    threading_num = 20  # 线程数
    threading_list = []  # 保存线程列表
    task_list = []  # 任务列表
    for txt in txt_list:
        task_list.append(txt)  # 将任务保存入列表
        if len(task_list) == threading_num:  # 如果保存的任务等于线城数则执行
            for task in task_list:
                t = threading.Thread(target=parse, args=(task,))
                t.start()
                threading_list.append(t)
            for thr in threading_list:
                thr.join()
            task_list.clear()  # 所有线程执行完毕后清空任务列表

    '''执行剩余不满足线程数任务'''
    if task_list:
        for task in task_list:
            t = threading.Thread(target=parse, args=(task,))
            t.start()
            threading_list.append(t)
        for thr in threading_list:
            thr.join()
        task_list.clear()

四、CSV操作

import csv
import os
import threading


lock = threading.Lock()


def get_csv_info():
    """
    获取csv信息
    :return: 
    """
    csv_list = []
    with open(f'test.csv', 'r', encoding='utf-8-sig', errors='ignore') as f:
        csv_info_list = csv.reader(f)
        for csv_info in csv_info_list:
            if csv_info:
                csv_list.append(csv_info)
    return csv_list


def file_exists(filename):
    # 使用os.path模块的exists()函数来检查文件是否存在
    if os.path.exists(filename):
        return True
    else:
        return False
    

def save_csv_info():
    """
    保存csv信息
    :return: 
    """
    file_name = f'test.csv'
    file_code = file_exists(file_name)  # 判断本地是否已有csv文件
    info_list = [{'姓名': '张三'}, {'年龄': '18'}]
    '''因为我经常使用多线程进行保存csv文件. 防止数据错乱、乱码等情况, 再保存的时候我通常会加个线程锁防止这种情况'''
    with lock:
        try:
            with open(file_name, 'a', newline='', encoding='utf-8-sig') as f:
                writer = csv.DictWriter(f, fieldnames=info_list[0].keys())
                if not file_code:  # 防止表头多次写入
                    writer.writeheader()
                writer.writerows(info_list)
                print('保存成功')
        except Exception as e:
            print(e)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值