用Python脚本提取文件中想要的内容

        使用Python编写的脚本,从一个.txt文件中批量获取你想要的内容。例如:批量提取文本中,当某一行存在 “×××××” 时获取这一行文字,并将所有提取的内容按顺序保存到一个新的文件中。

        注意:运行脚本需要安装Python运行环境,安装包大小只有30M左右,很轻量。直接在Python官网下载即可:https://www.python.org

1、创建、编写脚本

        在桌面新建一个文本文件,在用记事本打开后,复制填入以下这段代码后保存,文件名自定义,将后缀名从  “ .txt ”  改为  “  .py  ” 后即完成第一步。我这里演示文件名为“ extract.py ”。

def extract_content_after_marker(input_file, output_file, marker):

    # 读取输入文件
    with open(input_file, 'r', encoding='utf-8') as file:
        lines = file.readlines()

    extracted_content = []

    # 遍历每一行
    for i in range(len(lines)):
        if marker in lines[i]:  # 检查是否包含需要查找的内容
            extracted_content.append(lines[i])  # 添加到输出列表

    # 将提取的内容写入新的文件
    with open(output_file, 'w', encoding='utf-8') as file:
        file.writelines(extracted_content)


input_file = "E:\\UE5\\TestC\\Saved\\Logs\\TestC.log"  # "填写被提取的文件名"
output_file = "提取后的文件.txt"                        # "填写提取后输出文件名"
marker = "Couldn't find file for package"              # "填写需要查找的内容"

extract_content_after_marker(input_file, output_file, marker)

2、设置提取文件、内容

input_file = "E:\\UE5\\TestC\\Saved\\Logs\\TestC.log"  # "填写被提取的文件名"
output_file = "提取后的文件.txt"                        # "填写提取后输出文件名"
marker = "Couldn't find file for package"              # "填写需要查找的内容"
  • 为变量 input_file 填入想要去提取的那个文件的完整路径。我这里以UE5游戏开发项目的日志为例,我想要提取游戏在运行时特定的报错日志,可能有人注意到路径有双反斜杠 \\ ,我是为避免转义字符问题。我电脑UE5项目运行后,日志存放的完整路径为“E:\\UE5\\TestC\\Saved\\Logs\\TestC.log”。若不想填完整路径,也可以将此脚本放在与想要去提取文件的同目录中,然后将原路径字符串替换为文件名"TestC.log",即:
    input_file = "TestC.log"   # "填写被提取的文件名"
  •  为变量 output_file 填入输出的文件名称。即把获取到的所有内容放在什么位置,方便以后查看该文件。我这里是在获取到UE5日志后,把想要提取的内容直接放在脚本同目录中。即:
    output_file = "提取后的文件.txt"    # "填写提取后输出文件名"
  • 为 变量 marker 填入匹配内容。我这里想要获取所有在UE5游戏打包后,筛选其中出现资产丢失时所标记的位置,这样可以帮助我快速统计所有未打包的内容,非常方便。即:
    marker = "Couldn't find file for package"              # "填写需要查找的内容"

3、执行脚本

        在填写完这些必要的路径和查找内容后,保存文件,记得文件后缀名要改为  “  .py  ” 格式,我这里演示文件名为“ extract.py ”。在保存关闭后,可直接双击执行脚本。

        若你不能这么执行,也可以用控制台命令去执行:新建文件后缀名改为 .bat 后,填入以下命令,保存执行。执行时会打开控制台弹窗,若没有报错则只会显示:“请按任意键继续. . .” 的字样。若存在报错,则会显示具体原因,大多为路径指定错误的问题。

@echo off
python extract.py
pause

4、以此类推

        我们在使用这类脚本时,可以扩展到更多需求上,我们可以通过改变筛选规则来能实现不多的功能。我们例子的需求:“当文本某一行包含了 “×××××” 时,提取该行文字”  , 在上面脚本中起到匹配和筛选作用的是这三行Python代码,如下:

# 遍历每一行
for i in range(len(lines)):
    if marker in lines[i]:  # 检查是否包含需要查找的内容
        extracted_content.append(lines[i])  # 添加到输出列表

       经过这几天的学习发现,上面这三行代码也可用推导式进行简化为一行,即:

    #extracted_content = []
    # # 遍历每一行
    # for i in range(len(lines)):
    #     if marker in lines[i]:  # 检查是否包含需要查找的内容
    #         extracted_content.append(lines[i])  # 添加到输出列表

    extracted_content = [ i for i in lines if marker in i ]

         以此类推,比如,我想要提取包含 “×××××” 这一行中,在 “×××××” 后面的内容,而不是提取一整行。我们可以对脚本进行一点点修改,将上面三行代码修改为:

# 遍历每一行
for line in lines:
    if marker in line:  # 检查是否包含标记字符串
        # 提取标记字符串后面的内容
        content = line.split(marker, 1)[1].strip()
        if content:  # 确保提取的内容不是空字符串
            extracted_content.append(content + '\n')  # 添加到列表,并保留换行符

        以此类推,比如,我想要提取所有标记为 “×××××” 的下一行内容,而非当前标记行,则:

# 遍历每一行
for i in range(len(lines)):
    if lines[i].strip() == marker:  # 检查是否为标记行
        if i + 1 < len(lines):  # 确保不会超出索引范围
            extracted_lines.append(lines[i + 1])  # 添加下一行到列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值