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

2017-07-18 00:32:58 +08:00
 warcraft1236

Python 新手

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

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

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

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

8303 次点击
所在节点    Python
13 条回复
ysc3839
2017-07-18 00:42:54 +08:00
用 find 找到两个 pattern 然后 string[find1+len (pattern1):find2]
misaka19000
2017-07-18 00:46:36 +08:00
应该不能,操作系统读取文件的系统调用不能根据文件内容来判断吧,只能读到内存中再做处理了
ryd994
2017-07-18 06:36:30 +08:00
一行行读了判断呗………
zeraba
2017-07-18 08:04:50 +08:00
呐 把每一行先读出来 就像 3 楼说的 存到列表 然后开始找开始行和结束行的第一个索引 找到之后把内容存到另一个列表 并删除旧列表里面响应内容 然后继续循环
dawnven
2017-07-18 08:13:04 +08:00
正则表达式
dangyuluo
2017-07-18 08:46:37 +08:00
感觉效率比较高的方法是一行一行读,然后根据格式判断。
正则表达式就有点杀鸡用牛刀的感觉了。
warcraft1236
2017-07-18 09:54:28 +08:00
@dangyuluo 正则表达式效率会比较低吗?
wzha2008
2017-07-18 10:12:58 +08:00
按行读入内存,读到 start 后每行加入列表,再读到 end 就 break
yylucifer
2017-07-18 11:08:13 +08:00
@warcraft1236 用正则文本多了会很低。。
要讲效率,应该一行一行处理是比较高的
ToughGuy
2017-07-18 11:38:59 +08:00
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-07-18 11:52:08 +08:00
查一下是第几行然后 seed
warcraft1236
2017-07-18 13:34:41 +08:00
@ToughGuy 多谢,我明白了
VYSE
2017-07-18 13:37:36 +08:00
mmap

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

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

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

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

© 2021 V2EX