python文本处理尝试

news2024/11/28 12:33:43

Python文本处理尝试

最近打算看CSAPP,GitHub上看到有英语字幕ass源文件,想把字幕提取出来提高学习效率,先把ass文件转成txt文件,发现是这样👇

image-20221213114228835

都在Dialogue的后面,打算尝试提取一下

  • 不太熟练,下面是随便想的思路

    • 文件读入一整个字符串,然后从[Events]那里开始截断了,再做后续处理
    • 文件逐行读入字符串列表,然后定位到[Events]那里,查看它的index,然后用切片把后面的取出来,然后再对每个dialogue用切片或者什么split啥的把后面的字幕取出来(切片也可以,因为前面的格式固定,好数的)
  • 先试试上面第二种思路这种

    参考教程:Python 逐行读取txt 文件并生成列表

    txt_list = []
    
    with open("Lecture 01.txt", "r", encoding="utf-8") as f:  # 打开文件
        # data = f.read()  # 读取文件
        # print(data)
        line = f.readline()
        while line:
            txt_list.append(line)
            line = f.readline()
    
    # print(txt_list)
    print(len(txt_list))
    
    

    打印行数是847,那应该问题不大

  • 找出[Events]是第几个

    参考:python查找列表元素位置

    print(txt_list.index('[Events]\n'))
    

    是29,那么从31开始取

    在这里插入图片描述

  • 看看每句话的后面是从哪里开始切片

    txt_filtered = txt_list[31:]
    # print(txt_filtered)
    print(txt_filtered[0][50:])
    print(txt_filtered[1][50:])
    

    试了几次20,40,试出来是从50开始那么就好办了

    image-20221213132659761

  • 接下来对txt_filtered每个元素进行相同切片操作就行了, for循环或lambda表达式,我选后者

    参考:使用 lambda 表达式实现对列表中的元素求平方

    txt_result = list(map(lambda x:x[50:-1],txt_filtered))
    # print(txt_result)
    for item in txt_result:
        print(item)
    

    左闭右开,最右边是换行符\n,-1是为了把换行符去掉

    芜湖!

    image-20221213133124351

  • 接下来我要把这个列表写入文本文件

    参考:Python学习-将list列表写入文件并读取方法汇总

    • 试试writelines()

      # https://blog.csdn.net/zwt0909/article/details/52268717
      # https://blog.csdn.net/nanjunxiao/article/details/9086079
      # https://blog.csdn.net/weixin_40973138/article/details/106209020?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167090820216800192239538%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167090820216800192239538&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-106209020-null-null.142^v68^js_top,201^v4^add_ask,213^v2^t3_control1&utm_term=python%E9%80%90%E8%A1%8C%E8%AF%BB%E5%8F%96txt%E6%96%87%E4%BB%B6&spm=1018.2226.3001.4187
      txt_list = []
      
      with open("Lecture 01.txt", "r", encoding="utf-8") as f:  # 打开文件
          # data = f.read()  # 读取文件
          # print(data)
          line = f.readline()
          while line:
              txt_list.append(line)
              line = f.readline()
      
      # print(txt_list)
      # print(len(txt_list))
      print(txt_list.index('[Events]\n'))
      txt_filtered = txt_list[31:]
      # print(txt_filtered)
      print(txt_filtered[0][50:])
      print(txt_filtered[1][50:])
      
      txt_result = list(map(lambda x:x[50:-1],txt_filtered))
      # print(txt_result)
      for item in txt_result:
          print(item)
      
      
      fp = open("lec01 course overview.txt","w")
      fp.writelines(txt_result)
      fp.close()
      

      不是想要的效果,全都挤在一坨了

    • writelines括号里修改一下

      参考:python writelines换行_写入文件writelines 换行问题

      txt_list = []
      
      with open("Lecture 01.txt", "r", encoding="utf-8") as f:  # 打开文件
          # data = f.read()  # 读取文件
          # print(data)
          line = f.readline()
          while line:
              txt_list.append(line)
              line = f.readline()
      
      # print(txt_list)
      # print(len(txt_list))
      print(txt_list.index('[Events]\n'))
      txt_filtered = txt_list[31:]
      # print(txt_filtered)
      print(txt_filtered[0][50:])
      print(txt_filtered[1][50:])
      
      txt_result = list(map(lambda x:x[50:-1],txt_filtered))
      # print(txt_result)
      for item in txt_result:
          print(item)
      
      
      fp = open("提取字幕\lec01 course overview.txt","w")
      fp.writelines([line+'\n' for line in txt_result])
      fp.close()
      

      image-20221213134338515

      实现了,不过这样有点好玩哈哈哈😂,这样还不如之前切片的时候不去掉换行符,因为前面去掉了后面还要加上😂

  • 还想再进一步处理,我想写入txt后,把后缀名改为.md,然后直接变成无序列表,那么就是在每一行前面加上-和一个空格,

    改一行代码即可👇

    fp.writelines(['- '+ line+'\n' for line in txt_result])
    

    好耶!

    image-20221213135429380
    • 改为markdown👇

      image-20221213135522440

另外,直接复制markdown的源代码到CSDN编辑器好像比导入md文件更不容易丢失图床的图片还有格式???

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决 Eclipse 中不见 Maven 问题

在 Windows -> Preferences 不见 Maven 和 File -> New -> Project 均不见 Maven,但 Help -> Eclipse Marketplace -> installed 却可见已经安装,网上的各种方法都不能解决。 解决步骤: 关闭 Eclipse;清空目录 C:…

肿瘤网络平台

肿瘤网络平台是为广大肿瘤医生量身定做的学习,交流功能健全的网络平台,平台汇聚了会议、病例、专家讲堂等内容,广大的肿瘤医生可以随时分享、讨论专业知识。 一、平台价值 让医生 了解肿瘤前沿进展 提高业务水平 丰富临床经验 二、平台架构…

如何挖掘外贸客户需求

是客户的衣食父母。 俗话说“知己知彼,百战不殆”,外贸业务员都想把自己的产品推销给客户。除了知道自己产品的特点,还应该知道客户的需求是什么。因此,前期的客户调研工作非常重要。 不是所有的客户都是意向或潜在客户。只有当…

小程序canvas 缩放/拖动/还原/封装和实例--开箱即用

小程序canvas 缩放/拖动/还原/封装和实例一、预览二、使用2.1 创建和配置方法三、源码3.1 实例组件3.2 核心类一、预览 之前写过web端的canvas 缩放/拖动/还原/封装和实例。最近小程序也需要用到,但凡是涉及小程序canvas还是比较多坑的,而且难用多了&am…

[附源码]Node.js计算机毕业设计订餐系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

Linux中如何查看ntp是否同步?

Linux中如何查看ntp是否同步?在Linux中,查看ntp是否同步的方法主要有三种,分别是:ntpd命令、ntpstat命令、timedatectl命令,接下来是详细的内容介绍。  NTP用于将计算机客户或服务器的时间同步到另一服务器或参考时钟源。它使用…

Java基于微信小程序的计算机等级考试考练 毕业设计

网络的广泛应用给生活带来了十分的便利。所以把计算机等级考试考练与现在网络相结合,利用java技术建设计算机等级考试考练APP,实现计算机等级考试考练的信息化。则对于进一步提高计算机等级考试考练发展,丰富计算机等级考试考练经验能起到不少…

[附源码]Python计算机毕业设计电商后台系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

web前端期末大作业——HTML+CSS+JavaScript仿王者荣耀游戏网站设计与制作

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

基于kmeans算法的数据聚类matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 聚类算法也许是机器学习中“新算法”出现最多、最快的领域,一个重要的原因是聚类不存在客观标准,给定数据集总能从某个角度找到以往算法未覆盖的某种标准从而设计出新算法…

VR工厂:助力工厂数字化升级

近年来,疫情全球常态化和数字化进程加速,给传统制造业工厂在生产制作、业务销售上带来巨大考验。随着物联网、云计算、大数据和5G等信息技术的发展,制造工厂面临着第四次工业革命。2021年,国家发布“十四五规划”,着重…

Geometry空间几何数据的处理应用(全)

学前小故事 学前必备基础知识 WTK格式的Geomotry GeoJSON格式的Geomotry JTS(Java Topology Suite) Java拓扑套件 JTS(Java Topology Suite) 可视化界面 泰森多边形 向空间数据库插入数据 栅格 GDAL GeoTools QGIS 学前小故事 项目需求是跟用户当前位置判断是否在…

基于Android的校园新闻APP

功能需求: 客户端: 1:登录注册:用户可以通过自己的信息进行账号的注册和登录 2:校园新闻:本模块主要是介绍在本校的网站上面关于校园新闻的介绍,而本部分所针对的对象是所有人(包括了…

数字孪生赋能农业与农村的背景

数字乡村是伴随网络化、信息化和数字化在农业农村经济社会发展中的应用,以及农民现代信息技能的提高而内生的农业农村现代化发展和转型进程,既是乡村振兴的战略方向,也是数字孪生赋能、推动构建数字中国的重要内容。 数字孪生赋能农业与农村的…

Document Dewarping with Control Points学习笔记

1 核心思想 论文:Document Dewarping with Control Points 代码:https://github.com/gwxie/document-dewarping-with-control-points 一种通过估计控制点和参考点来纠正失真文档图像的简单而有效的方法。 控制点和参考点由相同数量的顶点组成&#xff0…

MIT张锋教授的Science论文,成功转化出一家新公司,融资2亿美元

基因治疗或基因疗法(Gene therapy)是利用分子生物学方法将目的基因导入患者体内,使之达成目的基因产物,从而使疾病得到治疗。作为疾病治疗的新手段,基因治疗已有一些成功的应用,并且科学突破将继续推动基因…

全栈Jmeter接口测试(八):jmeter接口自动化测试操作流程,计数器,定时器

Jmeter(16):jmeter接口自动化测试操作流程 在企业使用jmeter开展实际的接口自动化测试工具,建议按如下操作流程, 可以使整个接口测试过程更规范,更有效。 接口自动化的流程: 1、获取到接口文档:swagger、…

用openCV在图片上绘画标记

1.在图片上画图(直线,矩形,圆形,多边形) import numpy as np import cv2img cv2.imread(watch.jpg,cv2.IMREAD_COLOR)#给图片加线#参数分别表示,起始和终止点的坐标…

Git---本地仓库有多条commit,如何push某一条commit到远端

默认情况下&#xff0c;git push会推送暂存区所有提交&#xff08;也即HEAD及其之前的提交&#xff09;&#xff0c;使用下面的命令可以改变此默认行为&#xff1a; $ git push <remotename> <commit SHA>:<remotebranchname>举例如下&#xff1a; git pus…

小美,这篇查询SQL执行流程你一定要看

前言 宿舍里&#xff0c;小A兴致满满的将刚写好的查询SQL执行流程文章通过微信发给小美&#xff0c;回想起昨晚透过窗户意外看到小美哭的梨花带雨&#xff0c;问过她室友才知道竟然是因为面试被SQL执行流程给难住了。心里暗自下决心&#xff1a;作为小美背后的男人&#xff0c…