加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

8 个 Python 实用脚本,收藏备用

发布时间:2019-10-16 04:38:16 所属栏目:优化 来源:实验楼
导读:脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作。 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么。完成这个任务,如果一味希望采用编译型语言来编

6.下载Leetcode的算法题。

  1. import sys 
  2. import re 
  3. import os 
  4. import argparse 
  5. import requests 
  6. from lxml import html as lxml_html 
  7. try: 
  8.  import html 
  9. except ImportError: 
  10.  import HTMLParser 
  11.  html = HTMLParser.HTMLParser() 
  12. try: 
  13.  import cPickle as pk 
  14. except ImportError: 
  15.  import pickle as pk 
  16. class LeetcodeProblems(object): 
  17.  def get_problems_info(self): 
  18.  leetcode_url = 'https://leetcode.com/problemset/algorithms' 
  19.  res = requests.get(leetcode_url) 
  20.  if not res.ok: 
  21.  print('request error') 
  22.  sys.exit() 
  23.  cm = res.text 
  24.  cmt = cm.split('tbody>')[-2] 
  25.  indexs = re.findall(r'<td>(d+)</td>', cmt) 
  26.  problem_urls = ['https://leetcode.com' + url  
  27.  for url in re.findall( 
  28.  r'<a href="(/problems/.+?)"', cmt)] 
  29.  levels = re.findall(r"<td value='d*'>(.+?)</td>", cmt) 
  30.  tinfos = zip(indexs, levels, problem_urls) 
  31.  assert (len(indexs) == len(problem_urls) == len(levels)) 
  32.  infos = [] 
  33.  for info in tinfos: 
  34.  res = requests.get(info[-1]) 
  35.  if not res.ok: 
  36.  print('request error') 
  37.  sys.exit() 
  38.  tree = lxml_html.fromstring(res.text) 
  39.  title = tree.xpath('//meta[@property="og:title"]/@content')[0] 
  40.  description = tree.xpath('//meta[@property="description"]/@content') 
  41.  if not description: 
  42.  description = tree.xpath('//meta[@property="og:description"]/@content')[0] 
  43.  else: 
  44.  description = description[0] 
  45.  description = html.unescape(description.strip()) 
  46.  tags = tree.xpath('//div[@id="tags"]/following::a[@class="btn btn-xs btn-primary"]/text()') 
  47.  infos.append( 
  48.  { 
  49.  'title': title, 
  50.  'level': info[1], 
  51.  'index': int(info[0]), 
  52.  'description': description, 
  53.  'tags': tags 
  54.  } 
  55.  ) 
  56.  with open('leecode_problems.pk', 'wb') as g: 
  57.  pk.dump(infos, g) 
  58.  return infos 
  59.  def to_text(self, pm_infos): 
  60.  if self.args.index: 
  61.  key = 'index' 
  62.  elif self.args.title: 
  63.  key = 'title' 
  64.  elif self.args.tag: 
  65.  key = 'tags' 
  66.  elif self.args.level: 
  67.  key = 'level' 
  68.  else: 
  69.  key = 'index' 
  70.  infos = sorted(pm_infos, key=lambda i: i[key]) 
  71.  text_template = '## {index} - {title}n'  
  72.  '~{level}~ {tags}n'  
  73.  '{description}n' + 'n' * self.args.line 
  74.  text = '' 
  75.  for info in infos: 
  76.  if self.args.rm_blank: 
  77.  info['description'] = re.sub(r'[nr]+', r'n', info['description']) 
  78.  text += text_template.format(**info) 
  79.  with open('leecode problems.txt', 'w') as g: 
  80.  g.write(text) 
  81.  def run(self): 
  82.  if os.path.exists('leecode_problems.pk') and not self.args.redownload: 
  83.  with open('leecode_problems.pk', 'rb') as f: 
  84.  pm_infos = pk.load(f) 
  85.  else: 
  86.  pm_infos = self.get_problems_info() 
  87.  print('find %s problems.' % len(pm_infos)) 
  88.  self.to_text(pm_infos) 
  89. def handle_args(argv): 
  90.  p = argparse.ArgumentParser(description='extract all leecode problems to location') 
  91.  p.add_argument('--index', action='store_true', help='sort by index') 
  92.  p.add_argument('--level', action='store_true', help='sort by level') 
  93.  p.add_argument('--tag', action='store_true', help='sort by tag') 
  94.  p.add_argument('--title', action='store_true', help='sort by title') 
  95.  p.add_argument('--rm_blank', action='store_true', help='remove blank') 
  96.  p.add_argument('--line', action='store', type=int, default=10, help='blank of two problems') 
  97.  p.add_argument('-r', '--redownload', action='store_true', help='redownload data') 
  98.  args = p.parse_args(argv[1:]) 
  99.  return args 
  100. def main(argv): 
  101.  args = handle_args(argv) 
  102.  x = LeetcodeProblems() 
  103.  x.args = args 
  104.  x.run() 
  105. if __name__ == '__main__': 
  106.  argv = sys.argv 
  107.  main(argv) 

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读