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