Python 读取文本文件,怎么才能读取一段内容呢?

2017 年 7 月 18 日
 daiqiangbudainiu

Python 新手

有个文本文件,格式大概是这样的

一些内容....
###START RECORD
一些内容....
###END
一些内容...

我想读取从 ###START RECORD 开始到 ###END 这段的文本

请问有什么比较好的方法吗?

8983 次点击
所在节点    Python
13 条回复
ysc3839
2017 年 7 月 18 日
用 find 找到两个 pattern 然后 string[find1+len (pattern1):find2]
misaka19000
2017 年 7 月 18 日
应该不能,操作系统读取文件的系统调用不能根据文件内容来判断吧,只能读到内存中再做处理了
ryd994
2017 年 7 月 18 日
一行行读了判断呗………
zeraba
2017 年 7 月 18 日
呐 把每一行先读出来 就像 3 楼说的 存到列表 然后开始找开始行和结束行的第一个索引 找到之后把内容存到另一个列表 并删除旧列表里面响应内容 然后继续循环
dawnven
2017 年 7 月 18 日
正则表达式
dangyuluo
2017 年 7 月 18 日
感觉效率比较高的方法是一行一行读,然后根据格式判断。
正则表达式就有点杀鸡用牛刀的感觉了。
daiqiangbudainiu
2017 年 7 月 18 日
@dangyuluo 正则表达式效率会比较低吗?
wzha2008
2017 年 7 月 18 日
按行读入内存,读到 start 后每行加入列表,再读到 end 就 break
yylucifer
2017 年 7 月 18 日
@warcraft1236 用正则文本多了会很低。。
要讲效率,应该一行一行处理是比较高的
ToughGuy
2017 年 7 月 18 日
def read_part(filename, start='###START RECORD', end='###END'):
----content = []
----recording = False

----with open(filename) as f:
--------for line in f:
------------line = line.strip()

------------if line == end:
----------------break

------------if recording:
----------------content.append(line)

------------if line == start:
----------------recording = True
----return '\n'.join(content)
scriptB0y
2017 年 7 月 18 日
查一下是第几行然后 seed
daiqiangbudainiu
2017 年 7 月 18 日
@ToughGuy 多谢,我明白了
VYSE
2017 年 7 月 18 日
mmap

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/376043

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX