ptags.py

本文介绍了一款用于为Python程序生成标签的脚本,该脚本能够创建可与vi编辑器使用的tags文件,标记了函数、类和文件名,并能处理文件打开错误和避免重复标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自http://www.oschina.net/code/explore/Python-3.1.3/Tools/scripts/ptags.py
#! /usr/bin/env python

# ptags
#
# Create a tags file for Python programs, usable with vi.
# Tagged are:
# - functions (even inside other defs or classes)
# - classes
# - filenames
# Warns about files it cannot open.
# No warnings about duplicate tags.

import sys, re, os

tags = []    # Modified global variable!

def main():
    args = sys.argv[1:]
    for filename in args:
        treat_file(filename)
    if tags:
        fp = open('tags', 'w')
        tags.sort()
        for s in tags: fp.write(s)


expr = '^[ \t]*(def|class)[ \t]+([a-zA-Z0-9_]+)[ \t]*[:\(]'
matcher = re.compile(expr)

def treat_file(filename):
    try:
        fp = open(filename, 'r')
    except:
        sys.stderr.write('Cannot open %s\n' % filename)
        return
    base = os.path.basename(filename)
    if base[-3:] == '.py':
        base = base[:-3]
    s = base + '\t' + filename + '\t' + '1\n'
    tags.append(s)
    while 1:
        line = fp.readline()
        if not line:
            break
        m = matcher.match(line)
        if m:
            content = m.group(0)
            name = m.group(2)
            s = name + '\t' + filename + '\t/^' + content + '/\n'
            tags.append(s)

if __name__ == '__main__':
    main()

<body> <div class="conter"> </div> </body><script>let dataJsons = []; let dataJsonsErr =[ { "cardid": "0422AA12361E90", "building": "B栋", "floor": "1F", "area": "电气室", "project": "风扇1", "status":"OK", "msg":"", "checkTime":"2025.6.27-15:41:22" }, { "cardid": "0423AA12361E90", "building": "B栋", "floor": "1F", "area": "电气室", "project": "风扇2", "status":"OK", "msg":"", "checkTime":"2025.6.25-17:21:32" }, { "cardid": "0424AA12361E90", "building": "B栋", "floor": "2F", "area": "电气室", "project": "风扇3", "status":"NG", "msg":"异常报错2", "checkTime":"2025.6.24-10:11:08" },{ "cardid": "0425AA12361E90", "building": "B栋", "floor": "1F", "area": "电气室", "project": "风扇13", "status":"OK", "msg":"", "checkTime":"2025.6.25-17:21:32" }, { "cardid": "0426AA12361E90", "building": "B栋", "floor": "2F", "area": "电气室", "project": "风扇12", "status":"NG", "msg":"异常报错2", "checkTime":"2025.6.24-10:11:08" }, { "cardid": "0424AA12361E90", "building": "B栋", "floor": "2F", "area": "电气室", "project": "风扇3", "status":"NG", "msg":"异常报错2", "checkTime":"2025.6.24-10:11:08" }]; $(".conter").append( '<div class="InputDatas">'+ '<input class="AllDatas" id="searchInput" type="text" placeholder="输入搜索内容" value="" />'+ '<span id="resultCount">'+'</span>'+ '</div>'+ '<div class="u4Scoll" id="inputs-Scoll">'+ '<div class="BDALL">'+ '</div>'+ '</div> '+ '<button class="BtnTR">'+'提交任务'+'</button>'); $(".BtnTR").click(function(){ //其他代码 }) $.each(dataJsonsErr,function(index, item){ if(item.status == "OK"){ $(".BDALL").append( '<div class="BDSS">'+ '<div class="BDS_state" data-Text="正常">'+'</div>'+ '<div class="BDS_stateA">'+ '<P class="BDS_ID">'+'ID:'+ item.cardid +'</P>'+ '<P class="BDS_time">'+'时间:'+item.checkTime+'</P>'+ '<div class="BDS_stateWhy">'+ '<P class="BDS_decser">'+'备注:'+'</P>'+ '<p class="BDS_decserTexts" >'+ "无" +'</P>'+ '</div>'+ '</div>'+ '</div>'); }else if(item.status == "NG"){ $(".BDALL").append( '<div class="BDSS">'+ '<div class="BDS_states" data-Text="异常">'+'</div>'+ '<div class="BDS_stateA">'+ '<P class="BDS_ID">'+'ID:'+ item.cardid +'</P>'+ '<P class="BDS_time">'+'时间:'+item.checkTime+'</P>'+ '<div class="BDS_stateWhy">'+ '<P class="BDS_decser">'+'备注:'+'</P>'+ '<p class="BDS_decserTexts" >'+ item.msg +'</P>'+ '</div>'+ '</div>'+ '</div>'); } }); //关键词搜索 // 实时搜索功能 $('#searchInput').on('input', function() { const keyword = $(this).val().trim(); const $pTags = $('.BDSS p'); let matchCount = 0; let firstMatch = null; // 清除之前的高亮 $pTags.removeClass('highlight'); $pTags.find('span.highlight').each(function() { $(this).replaceWith($(this).text()); }); if (keyword.length > 0) { // 遍历所有p标签 $pTags.each(function() { const $p = $(this); const text = $p.text(); const regex = new RegExp(keyword, 'gi'); if (regex.test(text)) { matchCount++; // 标记第一个匹配项 if (!firstMatch) firstMatch = this; // 高亮显示关键词 const highlighted = text.replace(regex, match => `<span class="highlight">${match}</span>` ); $p.html(highlighted); } }); // 显示匹配数量 $('#resultCount').text(`找到 ${matchCount} 个结果`); // 滚动到第一个匹配项 if (firstMatch) { $('.BDALL').animate({ scrollTop: $(firstMatch).offset().top - $('.BDALL').offset().top + $('.BDALL').scrollTop() - 20 }, 500); } } else { $('#resultCount').text(''); // 恢复原始文本 $pTags.each(function() { $(this).text($(this).text()); }); } });</script>,想实现u4Scoll根据BtnTR所在的位置高度作为u4Scoll的盒子高度,BDALL里面新增的数据一旦超过u4Scoll盒子高度就开始overflow-y触发。由于在不同屏幕上BtnTR所在的位置高度也不一样,所以得让u4Scoll盒子的高度跟BtnTR所在的位置高度同步才行。怎么实现这个功能(这个代码实现地方是不同类型的android手机的移动端的屏幕)
08-12
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值