python - 从pycharm中的重组文本文件中删除面包屑
问题描述
我有大约 13,000 个文件需要从中删除面包屑。每个文件开头的模式大致如下所示:
Title
=====
| |image0| `link <link1.html>`__ |image1| ::
`link2 <link2.html>`__ ::
`link3 <link3.html>`__
| **Introduced** : VersionXXX
然而,在某些文件中,标题行和最后一行之间的部分是 2 或 4,具体取决于树的深度。无论标题行和此处显示的最后一行之间的行如何,我都希望将中间部分完全删除。我不太清楚如何做到这一点,希望能得到一些帮助。我正在使用 pycharm,他们有一个正则表达式工具(我还没有成功),但我同样很高兴使用 sed 或 python 之类的替代方法来遍历文件。
预期结果:
Title
=====
| **Introduced** : VersionXXX
感谢所有出色的解决方案。避免写入单独文件的最终解决方案:
import os
src_dir = '/PycharmProjects/docs/testfiles'
logf = open('failed_file_log.txt', 'w')
for filename in os.listdir(src_dir):
print(filename)
with open('{}/{}'.format(src_dir, filename), 'r') as f:
lines = f.readlines()
with open('{}/{}'.format(src_dir, filename), 'w') as f:
try:
for i in range(3):
f.write(lines[i])
copy = False
for line in lines:
if copy:
f.write(line)
elif line.startswith('| **Introduced**'):
copy = True
f.write(line)
except Exception as e:
logf.write('Failed to rewrite {}'.format(filename))
finally:
pass
解决方案
正如sed
OP 在问题中标记的那样,以下是获得所需结果的两个单行代码:
sed -n '/Title/{N;N;p}; /Introduced/{p}' input
Title
=====
| **Introduced** : VersionXXX
或者
awk
:
awk '/Title/{print;getline;print;getline;print}/Introduced/{print}' input
Title
=====
| **Introduced** : VersionXXX
推荐阅读
- entity-framework - 如何先手动将表添加到实体框架模型数据库
- android - 无法从我的 Android 应用程序下载来自 youtube 或 vimeo 的视频
- powerapps - 文本传入时字段增长
- ansible - Ansible wait_for 使用主机别名测试清单中主机的防火墙开口
- codeigniter - Google 身份验证未返回某些用户的用户名
- c++ - std::launch::async 不同线程的数量是否正确?
- javascript - 我如何在运行上一个调用时为 api 调用调用 saga?
- raid - 断电后如何在重新添加时重新组装 RAID5 阵列
- python - 如何手动将权重设置为 keras 中默认权重的输入特征?
- ios - 如何将解析数据存储到某个变量中