鱼C论坛

 找回密码
 立即注册
查看: 5706|回复: 11

[技术交流] Python高质量函数

[复制链接]
发表于 2018-2-24 17:53:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本人为提高Python技术,正在GitHub上更新一些自己写的或者收集来的高质量函数,欢迎在下方评论或提供函数(鱼币奖励)

也希望广大鱼友们帮忙star一下,让更多的Python爱好者看到,谢谢!

GitHub地址:https://github.com/Chinese-boy/Useful-Functions

只要是不重复的,你觉得方便的代码,欢迎分享,请自觉署名,不然收为己用。

被投稿的代码都是值得学习的,这也是提高水平的好机会!

评分

参与人数 3荣誉 +5 鱼币 +8 贡献 +2 收起 理由
余浪e + 3 + 2 + 2 支持楼主!
lapo_Mu + 1 + 1 热爱鱼C^_^
°蓝鲤歌蓝 + 1 + 5 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-24 19:23:22 | 显示全部楼层
嘿嘿!我给了一颗星

点评

我很赞同!: 5.0
我很赞同!: 5
赞赞赞~  发表于 2018-2-24 19:31
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

发表于 2018-2-24 21:28:25 | 显示全部楼层
import random
# 产生4位验证码
def main():
    a = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
         'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L',
         'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '我', '爱', '中', '国']
    b = ''
    while len(b) != 4:
        c = random.randint(0, len(a) - 1)
        b += a[c]
    print(b)
    cc = input('请输入验证码:')
    if cc.lower() == b.lower():
        print('验证码正确')
    else:
        print('验证码输入错误')
main()

评分

参与人数 1鱼币 +6 收起 理由
新手·ing + 6

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

发表于 2018-2-27 12:43:10 | 显示全部楼层
去除爬取到网页内除了文字以外的内容,在贴吧爬取小说的时候很有用~~
# -*- coding: cp936 -*-
#-*-coding :utf-8 -*-
'''
Created on 2018年2月25日

@author: MDK
'''
import re
class Tools(object):
    removeImg = re.compile('<img.*?>')
    removBr = re.compile('<br>')
    removeHef = re.compile('<a href.*?>')
    removeA = re.compile('</a>')
    removeClass = re.compile('<a class.*?>|<aclass.*?>')
    removeNull = re.compile(' ')


    def remove(self,te):
        te = re.sub(self.removeImg,'',te)
        te = re.sub(self.removBr,'\n',te)
        te = re.sub(self.removeHef,'',te)
        te = re.sub(self.removeA,'',te)
        te = re.sub(self.removeClass,'',te)
        te = re.sub(self.removeNull, '', te)
        return  te
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 13:39:17 | 显示全部楼层
本帖最后由 孤独的嫖客 于 2018-2-27 13:41 编辑
  1. from selenium import webdriver
  2. from selenium.webdriver.support.ui import WebDriverWait
  3. from selenium.webdriver.support import expected_conditions as EC
  4. from selenium.webdriver.common.by import By

  5. # Type指By类型,Msg指元素标记(id,class,name等),Driver指驱动实例化后的对象,Max指最大等待时间,Speed指检测频率,学了显式等待的人都懂
  6. def wait_(Type, Msg, Driver, Max=5, Speed=0.5):
  7.     temp = WebDriverWait(Driver, Max, Speed).until(
  8.         EC.presence_of_element_located((Type, Msg)))
  9.     print(temp)
  10.     return temp


  11. br = webdriver.Chrome()
  12. br.get('https://www.taobao.com/')
  13. # try:
  14. Q1 = wait_(By.CLASS_NAME, 'conve-list', br)
复制代码

selenium中的显式等待经常被用到,但是每次一个显式等待,代码过于冗长,麻烦,还容易写错,我用函数封装了一下,只要输入必要的3个参数,就可以完成显式等待了

评分

参与人数 1鱼币 +10 收起 理由
新手·ing + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-1 19:48:09 | 显示全部楼层
自定元素随机字符串生成,之前在别的地方看到的,自己改来用的

  1. def weight_choice(weight):
  2.     """
  3.     :param weight: list对应的权重序列
  4.     :return:选取的值在原列表里的索引
  5.     """
  6.     t = random.randint(0, sum(weight) - 1)
  7.     for i, val in enumerate(weight):
  8.         t -= val
  9.         if t < 0:
  10.             return i

  11. #all_list是需要用到的随机元素列表,number是结果的长度,
  12. #tables是all_list等长的数值列表如all_list为['a','b','c']那么tables就为[7,4,1],这样子‘a’出现的几率最大,‘c’出现的几率最小
  13. def make_random(all_lists,numbers,tables):
  14.     list_a = all_lists
  15.     res=''
  16.     for i in range(0,numbers):
  17.         if i<numbers:
  18.             res+=all_lists[weight_choice(tables)]
  19.     return res
复制代码

评分

参与人数 1鱼币 +10 收起 理由
新手·ing + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-4 16:49:13 | 显示全部楼层
复制文件、文件夹,移动文件还有把一个文件夹里面的文件都列出来
  1. import traceback, os


  2. def list_files(top):
  3.     for path, dirs, files in os.walk(top):
  4.         for name in files:
  5.             yield os.path.join(path, name)


  6. def cp_file(one, other):
  7.     length = 30
  8.     # 打开文件
  9.     one_file = open(one, "rb")
  10.     other_file = open(other, "wb")

  11.     # 获取大小
  12.     one_size = os.path.getsize(one)

  13.     # 已复制长度
  14.     num = 0
  15.     # 每次读取1MB,然后写入1MB
  16.     print("正在把 %s 复制到 %s ……" % (os.path.split(one)[1], \
  17.                                 os.path.split(other)[1]))
  18.     while True:
  19.         write_bytes = one_file.read(1024*1024)
  20.         other_file.write(write_bytes)
  21.         num += len(write_bytes)
  22.         try:
  23.             x = int(num / one_size * length)
  24.         except ZeroDivisionError:
  25.             x = length
  26.         try:
  27.             y = int(num / one_size * 100)
  28.         except ZeroDivisionError:
  29.             y = 100
  30.         print("{}{}|已完成{:.2f}%".format("#" * x, \
  31.                                 " " * (length - x), \
  32.                                y), end="\r")
  33.         if len(write_bytes) < 1024*1024:
  34.             break
  35.     print("\n复制完成!")

  36.     # 打开文件后别忘记关掉文件
  37.     one_file.close()
  38.     other_file.close()
  39.    
  40. def mv_file(one, other):

  41.     length = 30
  42.     # 打开文件
  43.     one_file = open(one, "rb")
  44.     other_file = open(other, "wb")

  45.     # 获取大小
  46.     one_size = os.path.getsize(one)

  47.     # 已复制长度
  48.     num = 0
  49.     # 每次读取1MB,然后写入1MB
  50.     print("正在把 %s 移动到 %s ……" % (os.path.split(one)[1], \
  51.                                 os.path.split(other)[1]))
  52.     while True:
  53.         write_bytes = one_file.read(1024*1024)
  54.         other_file.write(write_bytes)
  55.         num += len(write_bytes)
  56.         x = int(num / one_size * length)
  57.         print("{}{}|已完成{:.2f}%".format("#" * x, \
  58.                                 " " * (length - x), \
  59.                                num / one_size * 100), end="\r")
  60.         if len(write_bytes) < 1024*1024:
  61.             break
  62.         
  63.     # 打开文件后别忘记关掉文件
  64.     one_file.close()
  65.     other_file.close()
  66.    
  67.     os.remove(one)
  68.     print("\n移动完成!")

  69.    
  70. def cp_dir(one, other):
  71.     if one[-1] == os.sep:
  72.         one_parent_dir = one[:]
  73.     else:
  74.         one_parent_dir = one[:] + os.sep
  75.         
  76.     if other[-1] == os.sep:
  77.         other_parent_dir = other[:]
  78.     else:
  79.         other_parent_dir = other[:] + os.sep
  80.     print(other_parent_dir)
  81.         
  82.     for name in list_files(one):
  83.         x = "".join(name.split(one_parent_dir)[1:])
  84.         try:
  85.             mk_dir = os.path.split(x)[0]
  86.             os.makedirs("%s%s" % (other_parent_dir, mk_dir))
  87.         except:
  88.             pass
  89.         cp_file("%s%s" % (one_parent_dir, x), \
  90.                 "%s%s" % (other_parent_dir, x))
  91.    
  92.    
  93. if __name__ == "__main__":
  94.     cp_dir(r"D:\程序", \
  95.            r"C:\Users\Administrator\Desktop\程序")
复制代码

评分

参与人数 1鱼币 +10 收起 理由
新手·ing + 10 赞!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-6 20:48:09 | 显示全部楼层
  1. def p(string = input('请输入文本:')):
  2.         if string == string[::-1]:print('是回文')
  3.         else:print('不是回文')
复制代码


简明版回文判断

评分

参与人数 1鱼币 +4 收起 理由
新手·ing + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-15 10:49:38 | 显示全部楼层
我也写了一个关于selenium显示等待的。
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.support.wait import WebDriverWait
  4. from selenium.webdriver.support import expected_conditions as EC

  5. def explicit_wait(driver, selector, timeout = 5, speed=0.5):
  6.     if ',' not in selector:
  7.         selector_by='i'
  8.         selector_value = selector
  9.     else:
  10.         selector_by = selector.split(',')[0]
  11.         selector_value = selector.split(',')[1]
  12.     selector_types={
  13.         'i':(By.ID,selector_value),
  14.         'n':(By.NAME,selector_value),
  15.         'c':(By.CLASS_NAME,selector_value),
  16.         'l':(By.LINK_TEXT,selector_value),
  17.         'p':(By.PARTIAL_LINK_TEXT,selector_value),
  18.         't':(By.TAG_NAME,selector_value),
  19.         'x':(By.XPATH,selector_value),
  20.         's':(By.CLASS_NAME,selector_value),
  21. }
  22.     try:
  23.         WebDriverWait(driver, timeout, speed).until(
  24.                 EC.presence_of_element_located(selector_types.get(selector_by)))
  25.         return True
  26.     except:
  27.         return False

  28. if __name__ == '__main__':
  29.     driver = webdriver.Firefox()
  30.     url = r'http://www.baidu.com'
  31.     driver.get(url)
  32.     print('0:',explicit_wait(driver,'su'))
  33.     print('1:',explicit_wait(driver,'i,su'))
  34.     print('2:',explicit_wait(driver,'n,wd'))
  35.     print('3:',explicit_wait(driver,'c,mnav'))
  36.     print('4:',explicit_wait(driver,'l,视频'))
  37.     print('5:',explicit_wait(driver,'p,更多'))
  38.     print('6:',explicit_wait(driver,'t,input'))
  39.     print('7:',explicit_wait(driver,'x,//*[@id="kw"]'))
  40.     print('8:',explicit_wait(driver,'s,#su'))
复制代码

评分

参与人数 1鱼币 +10 收起 理由
新手·ing + 10 大佬,萌新不是太懂,能细说说吗

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-15 15:17:14 | 显示全部楼层
本帖最后由 堕落之翼 于 2018-4-15 15:18 编辑
堕落之翼 发表于 2018-4-15 10:49
我也写了一个关于selenium显示等待的。


WebDriverWait()在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。一般配合until()使用.这个方法是网上查的
selector_types是对8种selenium常用定位方法的封装。比前一位朋友的方法减少输入By参数,增加可用性。同时字典查找能加快执行速度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-1 12:27:34 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-3-22 16:36 编辑

None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表