Python开发过程中常用到的封装功能函数

以下函数均由道无涯i封装,如果有更好的改进欢迎评论区指正!

完整路径拼接

def 完整路径拼接(fileName=None):
    """
    适用于打包和直接运行的情况。
    fileName为完整文件名,例 "测试.txt"
    如果fileName为空,则返回当前程序所在目录;
    如果fileName不为空,则返回 当前程序所在目录和fileName拼接后的路径
    """
    if getattr(sys, 'frozen', False):
        # 如果是打包后的exe文件
        if fileName:
            return os.path.join(os.path.dirname(sys.executable), fileName)
        return os.path.dirname(sys.executable)
    else:
        # 如果是直接运行的.py文件
        if fileName:
            return os.path.join(os.path.dirname(__file__), fileName)
        return os.path.dirname(__file__)

读取指定行

def 读取指定行(txt_path, line_number):
    """
    读取txt文本的指定行
    txt_path:txt文本路径
    line_number:读取的行号
    返回读取的文本内容
    """
    with open(txt_path, "r", encoding='utf-8') as file:
        lines = file.readlines()
        if 0 <= line_number < len(lines):
            return lines[line_number]
        else:
            return None

删除指定行

def 删除指定行(txt_path, line_number):
    """
    删除txt文本的指定行
    txt_path:txt文本路径
    line_number:删除的行号
    """
    # 读取文件所有行
    with open(txt_path, "r", encoding='utf-8') as file:
        lines = file.readlines()

    # 检查行号是否有效
    if 0 <= line_number < len(lines):
        # 删除指定行
        del lines[line_number]

        # 将剩余的行重新写入文件中
        with open(txt_path, "w", encoding='utf-8') as file:
            file.writelines(lines)
    else:
        print("指定的行号无效!")

不重复写入文本

def 不重复写入文本(txt_path, content):
    """
    将指定文本写入txt文件,如果txt文件内已存在该文本内容,则不写入
    txt_path:txt文本路径
    content:指定写入的文本
    """
    已存在 = False
    if os.path.exists(txt_path):
        with open(txt_path, "r", encoding="utf-8") as f:
            if content in f.read():
                已存在 = True
                print(f"文本已存在,不写入{txt_path}!")
        f.close()
    # 如果不存在相同的文本,则写入文件
    if not 已存在:
        print(f"将文本写入{txt_path}!")
        with open(txt_path, "a", encoding="utf-8") as f:
            if content.endswith("\n"):  # 检查内容是否已经以换行符结束
                f.write(content)  # 如果已经以换行符结束,直接写入
            else:
                f.write(content + "\n")  # 如果没有以换行符结束,添加一个换行符后写入
        f.close()

提取代理ip

def 提取代理ip(link):
    """
    根据link提取代理ip,并检测可用性,直到可用才退出函数
    link:提取ip的url链接
    返回提取到的可用的代理ip
    """
    try:
        # 获取代理ip
        proxy = requests.get(link, timeout=5).text.strip()
        print('正在使用代理:', proxy)
        proxies = {
            "http": f"http://{proxy}",
            "https": f"http://{proxy}",
        }
        # 先用 requests 检查代理是否可用
        response = requests.get("http://httpbin.org/ip",
                                proxies=proxies, timeout=5)
        response.raise_for_status()  # 如果响应状态码不是 200,将抛出 HTTPError 异常
        return proxy
    except Exception as e:
        print('该代理不可用,正在更换代理...', e)
        time.sleep(1)
        return 提取代理ip(link)

控件点击函数重新封装

function click(selector, depth, indexArr) {
    /****
     * 控件点击,成功返回true,否则返回false
     * selector 选择器,例如:id("11").text("22")
     * depth 层数,如果是0,则点击自身,不找parent或child,此时参数indexArr可省略不写
     * indexArr 数组,depth为0时可省略,depth有几层就代表indexArr数组成员有几个
     * 数组成员里-1代表parent(),>=0则代表child的索引,例child(0)、child(1)等等
     */
    /*****************************
     * 调用示例如下
    【1】点击id为button的控件:
    click(id("button"),0)  等价于 id("button").findOne(1000).click()
    【2】点击id为button的父控件  
    click(id("button"),1,[-1])  等价于 id("button").findOne(1000).parent().click()
    【3】点击id为button的父控件的父控件
    click(id("button"),1,[-1,-1])  等价于 id("button").findOne(1000).parent().parent().click()
    【4】点击id为button的父控件的父控件的第2子控件
    click(id("button"),1,[-1,-1,1])  等价于 id("button").findOne(1000).parent().parent().child(1).click()
    【5】点击id为button的父控件的父控件的第2子控件的第3子控件
    click(id("button"),1,[-1,-1,2,2]) 等价于 id("button").findOne(1000).parent().parent().child(1).child(2).click()
     */
    try {
        let target = selector.findOne(1000);
        for (let i = 0; i < depth; i++) {
            let index = indexArr[i]
            if (index == -1) {
                target = target.parent();
            } else if (index >= 0) {
                target = target.child(index);
            }
        }
        return target.click();
    } catch (error) {
        console.log("tap_error" + error)
        return false
    }
}

其他

以后遇到了再补充...


作 者:道无涯
来 源:道无涯博客
链 接: https://www.daowuya.love/python开发过程中常用到的封装功能函数/
版 权 声 明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。文章版权归作者所有,未经允许请勿转载!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇