python从log中提取需要的数据包含json 和数字 字母包含验证

该Python脚本用于读取包含SCRMRequester的日志文件,提取ecom_customer_no和join_store_code字段。如果join_store_code不是全数字,它将被保存到errorInfo字典中。脚本首先筛选含有特定关键字的行,然后解析JSON数据并检查字段是否为数字。
摘要由CSDN通过智能技术生成

有很多个log,需要提取log中一个字段A的值,不全是数字(包含字母)的数据list

我的log示例
在这里插入图片描述

os、json都是python自带的包,不需要导入
open() 打开一个文件
readline() 逐行读取文件
str().isdecimal()是判断字符串是否全部是数字,是的话返回true
json.loads(data)字符串转json对象

formart()方法是使用{}为标识符,在后面传入对应的值即可
另一种用法是{0}、{1},即在{}中加入index,后面按照对应的顺序传入即可
例如:print(‘a = {1}; b = {0}; c{1}]’.format(‘abcdefg’, ‘1234567’))
python print('a = {1}; b = {0}; c{1}]'.format('abcdefg', '1234567'))
运行效果:
在这里插入图片描述

import json
import os

errorInfo = {}  # 事先声明一个字典作为保存数据的容器


# 定义一个读取文件的方法
def readFile(fileName):  # 参数为文件的路径
    f = open(fileName, mode='r', encoding='utf-8')  # 打开文件
    line = f.readline()  # 逐行读取文件内容
    while line:  # 循环
        if 'SCRMRequester' in line:  # 先筛选提取每行中包含【SCRMRequester】的数据
            data = line[95:]  # 提取第95个字符之后的数据
            if '[]' not in data and 'OgilvyApiRetailVips' not in line:  # 筛选剔除空json和其它的错误数据
                try:  # 防止报错停止程序
                    json1 = json.loads(data)  # 转为json
                    for item in json1:  # 循环取json list中的单个json对象
                        ecom_customer_no = item['ecom_customer_no']  # 获取对应的值
                        join_store_code = str(item['join_store_code'])  # 获取对应的值
                        if join_store_code.isdecimal():  # 判断是否全部是数字
                            print('ecom_customer_no = {}; join_store_code = {}'.format(ecom_customer_no,
                                                                                       join_store_code))  # 打印
                        else:
                            errorInfo[str(ecom_customer_no)] = join_store_code  # 保存到errorInfo字典中
                except Exception as e:
                    print(e.msg)
        line = f.readline()  # 读取下一行
    f.close()


# 定义一个获取文件夹中所有文件名的方法
def getFileNames(path):  # 参数是文件夹的路径
    # os.listdir()方法获取文件夹名字,返回数组
    file_name_list = os.listdir(path)
    return file_name_list


if __name__ == '__main__':
    path = 'C:\\***\\CRM'
    file_name_list = getFileNames(path)  # 获取到文件名的集合
    for filename in file_name_list:  # 遍历文件名集合并以文件名为参数调用读取文件方法
        readFile('C:\\***\\CRM\\' + filename)
    print(errorInfo)  # 打印出需要的数据


在PyTorch,可以使用`torchtext`库来进行数据预处理。下面是一个基本的数据预处理流程: 1. 导入`torchtext`库和必要的模块: ```python import torchtext from torchtext.vocab import Vectors, GloVe import torch import pandas as pd ``` 2. 定义数据集的字段: ```python text_field = torchtext.data.Field(sequential=True, use_vocab=True, tokenize=lambda x: x.split(), lower=True) label_field = torchtext.data.Field(sequential=False, use_vocab=False) ``` 其,`text_field`表示输入文本的字段,`label_field`表示标签的字段。 3. 读取数据集并进行预处理: ```python train_data, test_data = torchtext.data.TabularDataset.splits( path='.', train='train.csv', test='test.csv', format='csv', fields=[('text', text_field), ('label', label_field)]) text_field.build_vocab(train_data, vectors=GloVe(name='6B', dim=300)) ``` 其,`TabularDataset`表示读取csv文件的数据集类,`train`和`test`参数分别指定训练集和测试集的文件名,`fields`参数指定每列的字段名和对应的`Field`对象。`build_vocab`方法用于构建词汇表,`vectors`参数指定词向量的来源,这里使用的是GloVe预训练的词向量。 4. 定义迭代器: ```python train_iter, test_iter = torchtext.data.Iterator.splits( (train_data, test_data), sort_key=lambda x: len(x.text), batch_sizes=(32, 32)) ``` 其,`Iterator`类用于生成迭代器,`sort_key`参数指定按输入文本的长度排序,`batch_sizes`参数指定批次大小。 5. 将文本的英文字母转化为小写: ```python text_field = torchtext.data.Field(sequential=True, use_vocab=True, tokenize=lambda x: x.split(), lower=True) ``` 其,`lower=True`表示将所有英文字母转化为小写。 6. 将特征含有英文字母的列忽略: ```python train_data, test_data = torchtext.data.TabularDataset.splits( path='.', train='train.csv', test='test.csv', format='csv', fields=[('text', None), ('label', label_field)]) ``` 其,`None`表示忽略该列。 完整代码如下: ```python import torchtext from torchtext.vocab import Vectors, GloVe import torch import pandas as pd text_field = torchtext.data.Field(sequential=True, use_vocab=True, tokenize=lambda x: x.split(), lower=True) label_field = torchtext.data.Field(sequential=False, use_vocab=False) train_data, test_data = torchtext.data.TabularDataset.splits( path='.', train='train.csv', test='test.csv', format='csv', fields=[('text', None), ('label', label_field)]) train_iter, test_iter = torchtext.data.Iterator.splits( (train_data, test_data), sort_key=lambda x: len(x.text), batch_sizes=(32, 32)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值