1.问题背景
在看了2023年拜年祭刘谦老师的魔术课后,不禁感叹于魔术师的精巧智慧
这里贴上链接,建议观看后再观看本文,食用效果最佳
【刘谦魔术课】2023第一课!没看过拜年纪的别点开!_哔哩哔哩_bilibili
2.问题描述
在视频中要完成这个魔术,需要获取一本书里面每一页的第一个字
然而手动获取一本书中每一页的第一个字是一件极其耗费时间精力的事情,假设一页需要10s,那么一个300页的书则需要10*300=3000s=50min,那么为什么不用程序来解决这个问题呢?
3.问题解决
首先要获取一本纸质书所对应的电子书,注意需要格式版本相同,不然每一页的第一个字无法对上
使用python编写以下程序
import pdfplumber
def extract_first_char(pdf_path, output_path):
with pdfplumber.open(pdf_path) as pdf, open(output_path, 'w', encoding='utf-8') as out_file:
for page_num, page in enumerate(pdf.pages, start=1):
text = page.extract_text()
if text:
# 去除首尾空白字符后取第一个字符
cleaned_text = text.strip()
first_char = cleaned_text[0] if cleaned_text else "(无文本)"
else:
first_char = "(无文本)"
# 写入结果
out_file.write(f"{page_num}:{first_char}\n")
if __name__ == "__main__":
input_pdf = "D:\pythonProject\1.pdf" # 替换为你的PDF路径
output_txt = "output.txt" # 输出文件名
extract_first_char(input_pdf, output_txt)
print(f"处理完成,结果已保存至 {output_txt}")
将代码中的pdf名称路径修改为你自己的pdf路径即可
将会把结果输出在python文件目录下的output.txt文件中
4.结果展示
运行示例结果如下图所示:
5.程序扩展
上面给的程序只是一个baseline进行参考,可以在以上的基础上根据自己的需求进行改进
5.1 改进1
比如说在txt中不换行,只是空格进行打印,将\n换为空格,这样复制到word中进行打印将会更方便,将如下代码:
out_file.write(f"{page_num}:{first_char}\n")
改为
out_file.write(f"{page_num}:{first_char} ")
5.2 改进2
想要寻找第二个字,第几个字,最后一个字都可以,将数组下标进行修改,将
first_char = cleaned_text[0] if cleaned_text else "(无文本)"
改为:
first_char = cleaned_text[-1] if cleaned_text else "(无文本)"
-1即为最后一个字,根据不同的需求修改不同的下标即可
6.写在最后
喜欢的话欢迎尝试一下哟
觉得有用的话欢迎点赞,收藏,评论一下哟