复习

  1. '''
  2. ATM:
  3. -- start.py
  4. BASE_DIR = os.path.dirname(__file__)
  5. sys.path.append(BASE_DIR)
  6. -- conf
  7. -- lib
  8. -- core
  9. -- log
  10. -- db
  11. -- interface
  12. 模块:一系列功能的集合体
  13. # 1.编译形成pyc 2.执行模块,产生名称空间存放模块的名字 3.在导包的文件中产生一个名字指向模块的名称空间
  14. 包:一系列模块的集合体
  15. import 包名 # => 走的就是包中__init__.py
  16. '''
  17. '''
  18. 时间
  19. 系统
  20. '''

random模块

  1. '''
  2. (0, 1):random.random()
  3. [1, 10]:random.randint(1, 10)
  4. [1, 10):random.randrange(1, 10)
  5. (1, 10):random.uniform(1, 10)
  6. 单例集合随机选择1个:random.choice(item)
  7. 单例集合随机选择n个:random.sample(item, n)
  8. 洗牌单列集合:random.shuffle(item)
  9. '''
  10. import random
  11. print(random)
  12. # for i in range(10):
  13. # print(random.random()) # (0, 1)
  14. for i in range(10):
  15. print(random.random())
  16. # for i in range(10):
  17. # print(random.randint(1, 10)) # [1, 10]
  18. # for i in range(10):
  19. # print(random.randrange(1, 10)) # [1, 9] [1, 10)
  20. for i in range(10):
  21. print('%.2f' % random.uniform(1, 10)) # 小数:(1, 10)
  22. ls = [1, 2, 3, 4, 5]
  23. print(random.shuffle(ls))
  24. print(ls)
  25. print(random.choice(ls))
  26. print(random.sample(ls, 3))
  27. # 验证码
  28. def get_code(count):
  29. code = ""
  30. # 能产生大小写字母与数字
  31. # 进行字符串拼接
  32. for i in range(count):
  33. c1 = chr(random.randint(65, 90))
  34. c2 = chr(random.randint(97, 122))
  35. c3 = str(random.randint(0, 9))
  36. code += random.choice([c1, c2, c3])
  37. return code
  38. print(get_code(18))
  39. def get_code(count):
  40. code = ""
  41. # 能产生大小写字母与数字
  42. # 进行字符串拼接
  43. for i in range(count):
  44. r = random.choice([1, 2, 3])
  45. if r == 1:
  46. c = chr(random.randint(65, 90))
  47. elif r == 2:
  48. c = chr(random.randint(97, 122))
  49. else:
  50. c = str(random.randint(0, 9))
  51. code += c
  52. return code
  53. print(get_code(18))
  54. def get_code(count):
  55. target = "1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"
  56. code_list = random.sample(target, count)
  57. return ''.join(code_list)
  58. print(get_code(6))

序列化模块

  1. # 什么是序列化:将对象转化为字符串
  2. # 什么是反序列化:将字符串转化为对象
  3. # 为什么要序列化:数据的存储和传输都采用的是字符串类型
  4. # 序列化的模块:json pickle shelve
  5. # json:支持跨语言,用于数据的传输
  6. # pickle:支持py的所有数据类型,所有可以将所有py的对象序列化后存储
  7. # shelve:支持py的所有数据类型,可以即时存于取
  8. # 序列化
  9. dump
  10. dumps
  11. # 反序列化
  12. load
  13. loads

json模块: 用于传输(多语言支持)

  1. '''
  2. 什么是json:就是完成文本序列化得到的文本字符串,json字符串具有一定的语法规范
  3. '''
  4. '''
  5. 1.支持的数据类型:int float str bool dict list null
  6. 2.复杂的json都是由{}与[]嵌套形成的数据
  7. 3.json字符串只能有一个根: json_str = '{}{}' | '{}[]' | '[][]' | '1null' # 报错,都是两个根
  8. 4.json中的str类型必须用""包裹(json字符串中的字符串类型不支持'' """""")
  9. '''
  10. # python对象 序列化 json字符串
  11. data = None
  12. res = json.dumps(data)
  13. print(res)
  14. # json字符串 反序列化 python对象
  15. json_str = '3.14'
  16. json_str = 'true'
  17. json_str = 'null'
  18. json_str = '{}'
  19. json_str = '[]'
  20. json_str = '1, null' # 有误,两个根
  21. # str类型,json只支持""
  22. json_str = "\"abc\""
  23. json_str = '"abc"'
  24. obj = json.loads(json_str)
  25. print(obj, type(obj))
  26. # 操作文件
  27. # 序列化
  28. obj = {'name': 'Owen', 'age': 17, 'gender': '男'}
  29. with open('a.txt', 'w', encoding='utf-8') as wf:
  30. json.dump(obj, wf, ensure_ascii=False)
  31. # json.dump(obj, wf, ensure_ascii=False)
  32. # wf.write('123')
  33. # wf.write('456')
  34. # 反序列化
  35. with open('a.txt', 'r', encoding='utf-8') as rf:
  36. obj = json.load(rf)
  37. print(obj)
  38. print(json.load(open('a.txt', 'r', encoding='utf-8')))
  39. # 注:json模块的序列化与反序列化是一一对应关系

pickle模块:支持所有数据类型

  1. import pickle
  2. # 序列化
  3. obj = {'name': 'Owen', 'age': 17, 'gender': '男'}
  4. res = pickle.dumps(obj)
  5. print(res)
  6. pickle.dump(obj, open('b.txt', 'wb'))
  7. # 反序列化
  8. print(pickle.loads(res))
  9. print(pickle.load(open('b.txt', 'rb')))

shelve模块:支持所有数据类型,即时存取

  1. import shelve
  2. shv_tool = shelve.open('c.shv')
  3. # 序列化
  4. shv_tool['name'] = 'Owen'
  5. # 反序列化
  6. res = shv_tool['name']
  7. print(res)
  8. # 文件通过shelve对象来关闭
  9. shv_tool.close()
  10. # writeback将反序列化到内存的数据,操作后即时同步到文件中
  11. with shelve.open('c.shv', writeback=True) as shv_tool:
  12. shv_tool['stus'] = ['Bob', 'Tom']
  13. # print(shv_tool['stus'])
  14. shv_tool['stus'].append('Jobs')
  15. print(shv_tool['stus'])

shutil:可以操作权限的处理文件模块

  1. # 基于路径的文件复制:
  2. shutil.copyfile('source_file', 'target_file')
  3. # 基于流的文件复制:
  4. with open('source_file', 'rb') as r, open('target_file', 'wb') as w:
  5. shutil.copyfileobj(r, w)
  6. # 递归删除目标目录
  7. shutil.rmtree('target_folder')
  8. # 文件移动
  9. shutil.remove('old_file', 'new_file')
  10. # 文件夹压缩
  11. # file_name: 压缩后得到的文件名 format:压缩格式 archive_path:要压缩的文件夹路径
  12. shutil.make_archive('file_name', 'format', 'archive_path')
  13. # 文件夹解压
  14. # unpack_file: 解压的文件 unpack_name:解压得到的文件夹名 format:解压格式
  15. shutil.unpack_archive('unpack_file', 'unpack_name', 'format')

加密模块

hashlib模块


  1. # 加盐
  2. # 什么是加盐:在原数据前或后添加一些预定的数据,与原数据一起进行加密
  3. # 为什么要加盐:
  4. # 1.当原数据过于简单,可以对其加盐,提高数据的复杂度
  5. # 2.盐与数据有一定相似度,混淆对真实数据的提取
  6. lock_obj = hashlib.md5() # 生产锁对象可以添加数据参数也可以省略
  7. lock_obj.update(b'before_salt')
  8. lock_obj.update('要被加密的数据'.encode('utf-8'))
  9. lock_obj.update(b'after_salt')
  10. print(lock_obj.hexdigest())
  11. # 注:要为新数据提供加密,一定要为该数据创建一个加密对象
  12. # 其他算法
  13. lock_obj = hashlib.sha3_256(b'123')
  14. print(lock_obj.hexdigest())
  15. lock_obj = hashlib.sha3_512(b'123')
  16. lock_obj.update(b'salt')
  17. print(lock_obj.hexdigest())

hmac模块

  1. import hmac
  2. # 与hashlib的不同点:生产锁对象时必须提高数据参数
  3. lock_obj = hmac.new(b'')
  4. print(lock_obj.hexdigest())
  5. lock_obj = hmac.new(b'')
  6. lock_obj.update(b'salt')
  7. print(lock_obj.hexdigest())

logging模块

  1. # logging记录项目日志的模块
  2. # 记录日志:将项目中产生的一些数据,或是信息,或是错误不再输出到控制台,而是输出到文件中,保存这样信息的文件就称之为日志文件

基本使用

  1. import logging
  2. import sys
  3. # 2.日志的基本配置
  4. logging.basicConfig(
  5. # 输出级别
  6. # level=logging.INFO,
  7. level=10,
  8. # 输出位置
  9. stream=sys.stderr, # sys.stdout 往控制台输出
  10. # filename='log/my.log', # 往文件输出 => 如果需要同时往多个位置输出,需要handles
  11. # 输出格式
  12. format='%(asctime)s: %(msg)s',
  13. datefmt='%H:%M:%S'
  14. )
  15. # 1.五大级别
  16. logging.debug('debug msg')
  17. logging.info('info msg')
  18. logging.warning('warning msg')
  19. # logging.warn('warning msg') # 弃用
  20. logging.error('error msg')
  21. logging.critical('critical msg')
  22. logging.fatal('critical msg') # 同critical

成员组成

  1. import logging
  2. # 1.打印者:自定义的打印者如何配置
  3. log1 = logging.getLogger('logger name')
  4. # 2.输出位置:两个文件输出位置与一个控制台输出位置
  5. hd_a = logging.FileHandler('log/a.log', encoding='utf-8')
  6. hd_cmd = logging.StreamHandler()
  7. # 3.输出格式
  8. fmt1 = logging.Formatter('%(asctime)s 【%(name)s】- %(msg)s')
  9. fmt2 = logging.Formatter('%(asctime)s - %(msg)s')
  10. # 4.打印者添加句柄 - 设置打印者的输出位置
  11. log1.addHandler(hd_a)
  12. log1.addHandler(hd_cmd)
  13. # 5.将格式绑定给输出位置(句柄)
  14. hd_a.setFormatter(fmt1)
  15. hd_cmd.setFormatter(fmt2)
  16. # 6.权限控制
  17. log1.setLevel(logging.DEBUG) # 打印者规定打印级别
  18. hd_a.setLevel(logging.WARNING) # 不同输出位置(句柄)再可以二次限定输出级别
  19. hd_cmd.setLevel(logging.DEBUG) # 不同输出位置(句柄)再可以二次限定输出级别
  20. # 7.不同级别输出信息
  21. log1.debug('debug msg')
  22. log1.info('info msg')
  23. log1.warning('warning msg')
  24. log1.error('error msg')
  25. log1.critical('critical msg')

logging配置文件的项目运用

  1. # 1.将打印者,句柄,与格式封装成配置信息
  2. # 2.加载配置信息
  3. # 3.使用自定义logger,采用的就是配置信息设置的logger
  4. # 优势:1,2两步是一劳永逸的,后期开发只需要在要记录日志的文件中使用自定义logger
  5. # 一、配置
  6. LOGGING_DIC = {
  7. 'version': 1,
  8. 'disable_existing_loggers': False,
  9. 'formatters': {
  10. 'o_fmt1': {
  11. 'format': '%(asctime)s 【%(name)s】- %(msg)s'
  12. },
  13. 'o_fmt2': {
  14. 'format': '%(asctime)s - %(msg)s'
  15. }
  16. },
  17. 'filters': {},
  18. 'handlers': {
  19. 'o_hd_file': {
  20. 'level': 'WARNING',
  21. 'class': 'logging.handlers.RotatingFileHandler', # 打印到控制台
  22. 'formatter': 'o_fmt1',
  23. 'filename': 'log/sys.log',
  24. 'encoding': 'utf-8',
  25. 'maxBytes': 1024*1024*5, # 日志大小 5M
  26. 'backupCount': 5,
  27. },
  28. 'o_hd_cmd': {
  29. 'level': 'DEBUG',
  30. 'class': 'logging.StreamHandler', # 打印到控制台
  31. 'formatter': 'o_fmt2'
  32. }
  33. },
  34. 'loggers': {
  35. 'o_owen': {
  36. 'level': 'DEBUG',
  37. 'handlers': ['o_hd_file', 'o_hd_cmd']
  38. },
  39. 'o_zero': {
  40. 'level': 'DEBUG',
  41. 'handlers': ['o_hd_cmd'],
  42. # 'propagate': True # 向上传递
  43. }
  44. }
  45. }
  46. # 二、加载配置
  47. import logging.config
  48. logging.config.dictConfig(LOGGING_DIC)
  49. # 三、使用
  50. log = logging.getLogger('o_zero')
  51. log.critical('信息')
  52. log1 = logging.getLogger('o_owen')
  53. log1.critical('信息')

re模块

  1. # re:正则,全称正则字符串 - re就是有特殊语法的字符串
  2. # re可以将有正则语法的字符串解析为对应的正则对象,用来匹配目标字符串
  3. # 学习re的目的:1.判断目标字符串是否合法 2.在目标字符串中提取想要的信息(信息匹配规则采用正则)
  4. # 基本使用
  5. import re
  6. r1 = re.findall(r'1', '123abc123')
  7. print(r1)
  8. # re.I不区分大小写匹配
  9. r2 = re.findall(r'a', '123abc123ABC', flags=re.I)
  10. print(r2)
  11. # 1.将 r'\d' 丢给_compile得到可以匹配数字的 正则对象
  12. # 2.正则对象.findall('目标字符串')
  13. r3 = re.findall(r'\d', '123abc123')
  14. print(r3)
  15. re_obj = re.compile(r'\d') # 将 r'\d' 丢给_compile得到可以匹配数字的 正则对象
  16. r4 = re_obj.findall('123abc123') # 正则对象.findall('目标字符串')
  17. print(r4)

单个字符

  1. # 一、单个字符语法
  2. # 匹配a
  3. print(re.findall(r'a', '123abc嘿嘿')) # ['a']
  4. # a或b
  5. print(re.findall(r'a|b', '123abc嘿嘿')) # ['a', 'b'] 不建议使用
  6. print(re.findall(r'[ab]', '123abc嘿嘿')) # ['a', 'b'] 建议使用
  7. # 非a非b
  8. print(re.findall(r'[^ab]', '123abc嘿嘿')) # ['1', '2', '3', 'c', '嘿', '嘿']
  9. # 数字
  10. print(re.findall(r'[0-9]', '12abc嘿嘿12')) # ['1', '2', '1', '2'] 建议使用
  11. print(re.findall(r'\d', '12abc嘿嘿12')) # ['1', '2', '1', '2'] 不建议使用
  12. # 字母
  13. print(re.findall(r'[a-zA-Z]', '12abc[嘿嘿ABC')) # ['a', 'b', 'c', 'A', 'B', 'C']
  14. # 字母数字_常用汉字:\w => 建议使用 [a-zA-Z0-9_]
  15. print(re.findall(r'\w', '12abc[_嘿嘿ABC')) # ['1', '2', 'a', 'b', 'c', '_', '嘿', '嘿', 'A', 'B', 'C']
  16. # 汉字 [\u4e00-\u9fa5]
  17. print(re.findall(r'[\u4e00-\u9fa5]', '12abc[_嘿嘿ABC')) # ['嘿', '嘿']
  18. # 空白字符:\s => 建议使用[ \f\n\r\t\v]
  19. print(re.findall(r'\s', ' \f\n\r\t\v')) # [' ', '\x0c', '\n', '\r', '\t', '\x0b']
  20. # 非\n的任意字符: .
  21. print(re.findall(r'.', ' \f\n\r\t\v*&_.')) # [' ', '\x0c', '\r', '\t', '\x0b', '*', '&', '_', '.']
  22. # 只想匹配.字符:\.
  23. print(re.findall(r'\.', ' \f\n\r\t\v*&_.')) # ['.']
  24. # re.S: 让.也能匹配\n,就可以理解为 . 可以匹配所有字符
  25. print(re.findall(r'.', ' \f\n\r\t\v*&_.', flags=re.S))
  26. # 取对立面 \d数字 \D非数字 \w=>\W \s=>\S
  27. print(re.findall(r'\D', '12abc\f嘿嘿12')) # ['a', 'b', 'c', '\x0c', '嘿', '嘿']

重复字符语法

  1. # 二、重复字符语法
  2. print(re.findall(r'ab', 'abacbabc')) # ['ab', 'ab']
  3. # 指定个数: 匹配abb
  4. print(re.findall(r'ab{2}', 'aababbabbb')) # ['abb', 'abb']
  5. # 贪婪匹配: 尽可能多的匹配
  6. # a0~2个b: a | ab | abb
  7. print(re.findall(r'ab{,2}', 'aababbabbb')) # ['a', 'ab', 'abb', 'abb']
  8. # a0~n个b:
  9. print(re.findall(r'ab{0,}', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
  10. # a1~3个b:
  11. print(re.findall(r'ab{1,3}', 'aababbabbb')) # ['ab', 'abb', 'abbb']
  12. # *: {0,}
  13. print(re.findall(r'ab*', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
  14. # +: {1,}
  15. print(re.findall(r'ab+', 'aababbabbb')) # ['ab', 'abb', 'abbb']
  16. # ?: {,1}
  17. print(re.findall(r'ab?', 'aababbabbb')) # ['a', 'ab', 'ab', 'ab']
  18. # 非贪婪匹配
  19. print(re.findall(r'ab{1,3}?', 'aababbabbb')) # ['ab', 'ab', 'ab']
  20. # 重点:非贪婪匹配应用场景,一般都是结合有开头与结尾的标识
  21. print(re.findall(r'<.{1,}>', '<a><b>msg</b></a>')) # ['<a><b>msg</b></a>']
  22. # 匹配标签
  23. print(re.findall(r'<.{1,}?>', '<a><b>msg</b></a>')) # ['<a>', '<b>', '</b>', '</a>']
  24. # *?: {0,}?
  25. # +?: {1,}?
  26. # ??: {,1}?
  27. print(re.findall(r'<.+?>', '<a><b>msg</b></a>')) # ['<a>', '<b>', '</b>', '</a>']

分组语法

  1. # 引子
  2. print(re.findall(r'(?:ab){2}', 'abbabab')) # ['abab']
  3. # findall(): 没有分组情况下,显示匹配的结果;如果有分组,显示分组结果
  4. # 分组:()
  5. # 取消分组:(?:)
  6. # 有名分组:(?P<名字>)
  7. # 案例:
  8. # 匹配链接
  9. print(re.findall(r'www\..+?\.com', 'www.baidu.comabcwww.sina.com')) # ['www.baidu.com', 'www.sina.com']
  10. # 获取链接的域名:['baidu', 'sina']
  11. print(re.findall(r'www\.(.+?)\.com', 'www.baidu.comabcwww.sina.com')) # ['baidu', 'sina']
  12. # 分组编号: 从左往右数左(进行分组编号
  13. # [('www.baidu.com', 'baidu', 'com'), ('www.sina.edu', 'sina', 'edu')]
  14. res = re.findall(r'(www\.(.+?)\.(com|edu))', 'www.baidu.comabcwww.sina.edu')
  15. print(res)
  16. print(res[0][1])
  17. # 取消分组:(?:) 应用于,要将一些数据作为整体看待,但由不能产生分组
  18. # [('www.baidu.com', 'baidu'), ('www.sina.edu', 'sina')]
  19. res = re.findall(r'(www\.(.+?)\.(?:com|edu))', 'www.baidu.comabcwww.sina.edu')
  20. print(res)

正则其他方法

  1. # match:不是全文匹配,必须从头开始匹配,且只匹配一次
  2. res = re.match(r'(www\.(?P<site_name>.+?)\.(?:com|edu))', 'www.baidu.comwww.sina.edu')
  3. # 可以通过分组号直接取出分组内容
  4. print(res.group(1))
  5. print(res.group(2))
  6. # print(res.group(0), res) # 匹配的整体
  7. # 有名分组
  8. print(res.group('site_name'))
  9. # split(): 拆分
  10. print('abc def xyz'.split(' '))
  11. print(re.split(r' ', 'abc def xyz'))
  12. print(re.split(r'[,@ ]', 'abc,def@xyz opq'))
  13. # sub(): 替换
  14. res = re.sub(r'good', 'bed', 'good good day a')
  15. print(res) # bed bed day a
  16. res = re.sub(r'good', 'bed', 'good good day a', count=1)
  17. print(res) # bed good day a
  18. res = re.sub(r'good day a', '123', 'good day a!!!')
  19. print(res) # 123!!!
  20. # 结合分组可以完成数据的重组
  21. res = re.sub(r'(good) (day) (a)', r'today is \3 \1 \2', 'good day a!!!')
  22. print(res) # today is a good day!!!

08-01-json-loggin-模块的更多相关文章

  1. Python 自学基础(四)——time模块,random模块,sys模块,os模块,loggin模块,json模块,hashlib模块,configparser模块,pickle模块,正则

    时间模块 import time print(time.time()) # 当前时间戳 # time.sleep(1) # 时间延迟1秒 print(time.clock()) # CPU执行时间 p ...

  2. 20181205(模块循环导入解决方案,json&pickle模块,time,date,random介绍)

    一.补充内容 循环导入 解决方案: 1.将导入的语句挪到后面. ​ 2.将导入语句放入函数,函数在定义阶段不运行 #m1.pyprint('正在导入m1')   #②能够正常打印from m2 imp ...

  3. day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)

    1. json序列化模块 # ### json """ 所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串 pickle:将数据 ...

  4. perl6 JSON::Fast模块json解析的使用

    关于JSON: JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,语法简单,各种语言都有相应的库或者模块支持. 因为JSON非常小巧,解析起来又非常简单,我 ...

  5. http://www.cnblogs.com/stephen-liu74/archive/2012/08/01/2561557.html

    http://www.cnblogs.com/stephen-liu74/archive/2012/08/01/2561557.html

  6. Pythoy 数据类型序列化——json&pickle 模块

    Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...

  7. python之os与json&pickle模块

     一.os模块 简单概述一下os模块就是与操作系统交互的一个接口 import os #os.getcwd() print(os.getcwd()) # 获取到当前工作目录 # 运行结果:E:\pyt ...

  8. 使用package.json安装模块

    node.js模块的安装可以使用npm安装,如下: $ npm install <Module Name> 每个项目的根目录下面,一般都需要一个package.json文件,定义了这个项目 ...

  9. Maven高级:01.maven分模块构建&&02.私服的应用

    IntelliJ IDEA 2018.3.6 x64 07 Maven高级:01.maven分模块构建(上) 07 Maven高级:01.maven分模块构建(中) 07 Maven高级:01.mav ...

  10. [re模块、json&pickle模块]

    [re模块.json&pickle模块] re模块 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则 ...

随机推荐

  1. c++网络库之 poco

    java 不好吗?java面向对象很好啊. poco 做的像 java 用起来更面向对象,这是优势.开发速度提升很多.boost 那种是给大牛看的.我觉得 poco 用起来方便,不清楚的地方随时看源码 ...

  2. vue 如何读取编译携带的参数

    vue 环境有很多套,我们需要根据不同环境设置不同的一些参数,如何不装任何依赖的情况下获取参数 下面是我制作官网,需要根据开发还是生产环境配置不同CDN,用vue-cli2+webpack,配置是再: ...

  3. Paint的Gradient的用法(转)

    转自:https://www.jianshu.com/p/02b02c1696b2 Paint的Gradient的用法 嗯哼嗯哼嗯哼嗯哼 关注 2017.07.04 15:45* 字数 173 阅读 ...

  4. oracle client 卸载

    1.停用oracle服务:进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止 2.在开始菜单中,找到Universal Installer,运行Oracle Universal I ...

  5. 如何用Word制作斜线表头?

    如何用Word制作斜线表头?遇到这种问题,你一般是如何操作?本期企业网盘坚果云干货分享与大家分享有关斜线表头的制作方法. 斜线表头分单斜线表头和多斜线表头,下面分情况来了解相关的解决办法. 单斜线表头 ...

  6. JS中实现replaceAll的方法

    第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace ...

  7. Django学习笔记(三)视图

    构建网页内容 视图函数的return具有多种响应类型: 上述函数主要来自django.http,该模块是实现响应功能的核心. 实际开发中可用此模块实现文件下载功能,在index的urls.py和vie ...

  8. springboot关联Mybatis和Redis依赖

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  9. PHP FILTER_SANITIZE_STRING 过滤器

    定义和用法 FILTER_SANITIZE_STRING 过滤器去除或编码不需要的字符. 该过滤器删除那些对应用程序有潜在危害的数据.它用于去除标签以及删除或编码不需要的字符. Name: " ...

  10. 【LeetCode 41】缺失的第一个正数

    题目链接 [题解] 先明确一点假设给的数字有n个. 那么最后的答案最情况下就是n+1 首先我们先判断一下所给的数组里面有没有1 如果没有直接返回1 否则. 把数组中所有的范围超过n或者小于1的数字全都 ...