有很多个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) # 打印出需要的数据