Commit 125d283c by “安晓东”

第十次作业

parent da5513ab
# Nim游戏
class Solution(object):
def canWinNim(self, n):
return False if n % 4 == 0 else True
from lession_10.opration_log import configlog
from lession_9.homework.operation_excel import OperationExcel
import time
import time
import random
from dateutil import rrule
import datetime
from multiprocessing import Process
from lession_9.user_log import User_log
import logging
class ClaculateWages:
def __init__(self, file_name, sheet_name, staff_num: int = 0, staff_cut_off_time: str = '',
staff_name: str = '', staff_info: str = '', tation: str = '', tation_and_salary: list = '',
exception: str = '', total_sala: str = '', start_time: str = '', end_time: str = ''):
self.staff_num = staff_num # 员工编号
self.staff_cut_off_time = staff_cut_off_time # 工资算时间
self.staff_name = staff_name # 员工姓名
self.staff_info = staff_info # 员工基本信息结
self.tation_salar = tation_and_salary
self.tation = tation # 岗位
self.exception = exception # 说明
self.total_sala = total_sala # 工资总计
self.start_time = start_time
self.end_time = end_time
self.poer = OperationExcel(file_name, sheet_name)
u = configlog()
self.logger = u.get_log()
# 讲计算结果写入excel
def write_info(self):
time.sleep(random.randint(1,1))
self.salary_num()
try:
self.data = {
"员工编号": self.staff_num,
"工资结算时间": self.staff_cut_off_time,
"员工姓名": self.staff_name,
"员工基本信息": self.staff_info,
"岗位": self.tation,
"工资": self.tat_sala,
"说明": self.exception,
"工资总计": self.salary_num(),
}
except AttributeError:
pass
lis = []
try:
for li in self.data.values():
lis.append(li)
num = self.poer.get_lines()
for i in range(len(lis)):
if self.salary_num() > 0:
self.poer.write_excel(num, i, lis[i])
# for y in range(len(self.poer.get_rols(2))-1):
# if self.poer.get_rols(2)[y] == self.poer.get_rols(2)[y+1]:
# return y
if self.poer.get_cell_data(num, 2) == self.poer.get_cell_data(num - 1, 2):
total = int(self.poer.get_cell_data(num - 1, 7)) + self.salary_num()
self.poer.write_excel(num, 7, total)
if i == len(lis) - 1:
lis[i] = ""
self.poer.write_excel(num - 1, 7, lis[i])
except AttributeError as e:
logging.info('岗位名称不合法' + '--->' +self.tation+' '+ str(e))
# 计算工资
def salary_num(self):
try:
if self.tation == '程序员':
self.tat_sala = self.tation_salar[0][self.tation]
if self.tation == '扫地':
self.tat_sala = self.tation_salar[1][self.tation]
if (self.days_between() // 7) >= 1:
sala = round(self.tat_sala * (self.days_between() / 7))
return sala
else:
return 0
except AttributeError:
pass
# 计算工作时间
def days_between(self):
days = rrule.rrule(rrule.DAILY, dtstart=self.start_time, until=self.end_time)
return days.count()
if __name__ == '__main__':
c = ClaculateWages('员工工资表.xls', 'Sheet1')
c.staff_num = 3
c.staff_cut_off_time = '2019-01-01'
c.staff_name = '王五'
c.staff_info = '居住在回龙观 '
c.start_time = datetime.date(2019, 1, 21)
c.end_time = datetime.date(2019, 1, 2)
c.tation_salar = [{"程序员": 2000}, {"扫地": 1000}]
c.tation ='程序员22'
c.exception = '工资结算4周'
# c.write_info()
pro1 = Process(target=c.write_info)
pro1.start()
pro1.join()
c.staff_num = 3
c.staff_cut_off_time = '2019-01-01'
c.staff_name = '王五'
c.staff_info = '居住在回龙观 '
c.start_time = datetime.date(2019, 1, 1)
c.end_time = datetime.date(2019, 1, 12)
c.tation_salar = [{"程序员": 2000}, {"扫地": 1000}]
c.tation = '扫地'
c.exception = '工资结算4周'
# c.write_info()
pro2 = Process(target=c.write_info)
pro2.start()
pro2.join()
c.staff_num = 2
c.staff_cut_off_time = '2019-01-01'
c.staff_name = '张三'
c.staff_info = '居住在回龙观 '
c.start_time = datetime.date(2019, 1, 1)
c.end_time = datetime.date(2019, 1, 31)
c.tation_salar = [{"程序员": 2000}, {"扫地": 1000}]
c.tation = '扫地'
c.exception = '工资结算4周'
pro3 = Process(target=c.write_info)
pro3.start()
pro3.join()
c.staff_num = 2
c.staff_cut_off_time = '2019-01-01'
c.staff_name = '丽莎娜'
c.staff_info = '居住在回龙观 '
c.start_time = datetime.date(2019, 1, 1)
c.end_time = datetime.date(2019, 1, 31)
c.tation_salar = [{"程序员": 2000}, {"扫地": 1000}]
c.tation = '程序员'
c.exception = '工资结算4周'
pro4 = Process(target=c.write_info)
pro4.start()
pro4.join()
2019-01-31 12:44:43,325--INFO--get_log--31--这是一个info级别的日志
2019-01-31 12:44:43,326--ERROR--get_log--32--这是一个错误级别的日志666666666666666666666
2019-01-31 12:44:43,326--ERROR--get_log--32--这是一个错误级别的日志666666666666666666666
2019-01-31 12:44:43,326--DEBUG--get_log--33--这是一个debug级别的日志
2019-01-31 12:51:35,950--INFO--get_log--31--这是一个info级别的日志
2019-01-31 12:51:35,951--ERROR--get_log--32--这是一个错误级别的日志666666666666666666666
2019-01-31 12:51:35,951--ERROR--get_log--32--这是一个错误级别的日志666666666666666666666
2019-01-31 12:51:35,951--DEBUG--get_log--33--这是一个debug级别的日志
2019-01-31 12:51:36,959--INFO--write_info--68--岗位名称不合法--->程序员22 'ClaculateWages' object has no attribute 'data'
import os
from xmlrpc.client import boolean
import xlrd
from xlutils.copy import copy
class OperationExcel:
def __init__(self, excel_file: str, sheet_name: str, ):
self.excel_fiel = excel_file
self.sheet_name = sheet_name
self.data = self.read_excel()
# 读取excel数据
def read_excel(self) -> str:
try:
data = xlrd.open_workbook(self.excel_fiel)
sheet = data.sheet_by_name(self.sheet_name)
return sheet
except FileNotFoundError as e:
print(e)
# 获取excel的某一行的内容
def get_rows(self, row):
return self.data.row_values(row)
# 获取某一列的内容
def get_rols(self, col):
return self.data.col_values(col)
# 获取excel单元格的内容
def get_cell_data(self, row, col):
try:
return self.data.cell_value(row, col)
except IndexError:
return 0
# excel 写入数据
def write_excel(self, row_num: int = 0, col_num: int = 0, content: str = '') -> boolean:
try:
read_data = xlrd.open_workbook(self.excel_fiel)
write_data = copy(read_data)
sheet_data = write_data.get_sheet(self.sheet_name)
sheet_data.write(row_num, col_num, content)
write_data.save(self.excel_fiel)
except FileNotFoundError as e:
print(e)
print(self.get_cell_data(row_num, col_num))
if self.get_cell_data(row_num, col_num) == content:
return True
else:
return False
# 获取行数
def get_lines(self):
try:
data = xlrd.open_workbook(self.excel_fiel)
sheet = data.sheet_by_name(self.sheet_name)
return sheet.nrows
except FileNotFoundError as e:
print('没有找到文件' + str(e))
if __name__ == '__main__':
o = OperationExcel('员工工资表.xls', 'Sheet1')
# print(o.get_rows(2))
print(o.get_cell_data(0, 8))
# print(o.get_rols(2))
# print(o.write_excel(4,4,'大家好'))
# print(o.write_excel(4,5,'海阔天空'))
o.get_lines()
import logging
import os
import datetime
class configlog:
def get_log(self):
self.logger = logging.getLogger()
self.logger.setLevel("DEBUG")
der = os.path.dirname(os.path.abspath(__file__))
log_dir = os.path.join(der, "logs")
log_file = datetime.datetime.now().strftime("%Y-%m-%d") + ".log"
log_name = log_dir + "/" + log_file
# 设置文件hender 这个设置是将内容输出到文件中
file_handler = logging.FileHandler(log_name, mode='a', encoding='utf-8')
# 流处理 输出到控制台
stream_hander = logging.StreamHandler()
# 将一个error文件输入到err.log的的文件中
error_handler = logging.FileHandler(log_name, mode='a',encoding='utf-8')
error_handler.setLevel(logging.ERROR)
self.logger.addHandler(file_handler)
self.logger.addHandler(error_handler)
self.logger.addHandler(stream_hander)
# 设置
formater = logging.Formatter(fmt="%(asctime)s--%(levelname)s--%(funcName)s--%(lineno)d--%(message)s")
file_handler.setFormatter(formater)
error_handler.setFormatter(formater)
stream_hander.setFormatter(formater)
# self.logger.info('这是一个info级别的日志')
# self.logger.error('这是一个错误级别的日志666666666666666666666')
# self.logger.debug('这是一个debug级别的日志')
if __name__ == '__main__':
c = configlog()
c.get_log()
import threading
import time
import random
def test(someinfo):
time.sleep(random.randint(1,2))
print('执行:'+someinfo)
if __name__ == '__main__':
t = threading.Thread(target=test, args=('线程',))
t.start()
print('主线程运行了')
\ No newline at end of file
from lession_9.properties_utils import Properties1
# from lession_9.use_log2 import test1
import logging
import os
import datetime
class User_log:
def set_log_config(self):
der = os.path.dirname(os.path.abspath(__file__))
pro = Properties1(der + '/' + 'log.properties').get_properties()
log_dir = os.path.join(der, "logs")
log_file = datetime.datetime.now().strftime("%Y-%m-%d") + ".log"
log_name = log_dir + "/" + log_file
log_config = {
"filename": log_name,
"level": pro["level"],
"format": pro["format"]
}
logging.basicConfig(**log_config)
def set_only_log_config(self):
der = os.path.dirname(os.path.abspath(__file__))
log_config = Properties1(der+'/'+'log.properties').get_properties()
logging.basicConfig(**log_config)
if __name__ == '__main__':
u = User_log()
u.set_only_log_config()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment