Python 读取 TXT 如何按照关键行提取内容

2021-01-06 15:21:46 +08:00
 zhuzhuaini

比如我有一个文本 A.txt;内容为:
[测试]
你好
你很好
[正式]
我好
我很好

我想用 Python 读取这个文本 并且呢 把"[测试]"下面的两行自动放入一个变量当中,把"[正式]"下面的内容放入另外一个变量中,这个"测试"和"正式"可以固定预先写死,想问下有哪些实现方式,谢谢

2877 次点击
所在节点    Python
26 条回复
mckelvin
2021-01-06 15:40:22 +08:00
建议不要自己编造出一个新的配置格式然后自己做解析,如果你使用现成格式的话就不用考虑这些问题。
现成的格式可以是 yaml, json, ini, toml, ...
zhuzhuaini
2021-01-06 15:50:08 +08:00
@mckelvin 我刚刚想到用 ini 了 但是 ini 似乎只能读取类似键值对的形式 想直接读取测试下面的所有内容似乎不行 他似乎需要 XXX=YYY 然后通过 XXX 去读取 YYY 这样
0DBBFF
2021-01-06 16:06:16 +08:00
是我没看明白还是太简单,直接打开文件读不就行了,最多加点判断条件
jdhao
2021-01-06 16:11:23 +08:00
直接循环读取文本行解析就行了,难点在哪
TimePPT
2021-01-06 16:12:46 +08:00
json 不好么
[{'测试': ['你好','你很好']}, {'正式': ['我好','我很好']}]
bytesfold
2021-01-06 16:14:16 +08:00
deque,Python Cookbook 第一章 1.3 节
xiaolinjia
2021-01-06 16:16:38 +08:00
你需要的是配置文件的格式,然后用 python 自带的 ConfigParser 模块去读就行了。
Jackeriss
2021-01-06 16:18:27 +08:00
用正则不就可以了吗?
zhuzhuaini
2021-01-06 16:20:00 +08:00
@jdhao 难点在于 怎么把两个[]中间的内容放入一个变量中
leebin
2021-01-06 16:25:18 +08:00
正常来讲像上面说的用正常的格式去存储就行,非要解析当前这种文本的话,按行读取,用正则匹配,读取到一个[]后,新建一个变量,把读到下一个[]前的内容存到这个变量中就行。不知道这样是否符合你想做的事
zhuzhuaini
2021-01-06 16:29:17 +08:00
@leebin 听起来靠谱...我琢磨下,,,其实我目前所做的事情是这样的,我有一个 TXT,里面有 8 个[],我写了个 GUI,里面有 8 个文本框 我想把这 8 个[]下面的内容 放入这 8 个文本框里面,然后我自由的修改文本框里的内容,然后还能保存,保存的格式就是刚刚说的[]下面然后内容,这样方便下一次的读取和修改,,,不知道大佬有没有更简单的实现方案
0DBBFF
2021-01-06 16:33:13 +08:00
@zhuzhuaini

```
import os

testArr = []
formalArr = []

rs = os.path.exists('./test.txt')
if rs:
file_handler = open('./test.txt', mode='r',encoding='utf-8')
contents = file_handler.readlines()
for line in contents:
line = line.strip('\n')
if'[测试]'==line:
isTest =True
continue

if'[正式]'==line:
isTest =False
continue

if isTest:
testArr.append(line)
else:
formalArr.append(line)

print(testArr)
print(formalArr)
```

随便写了下,如果有好几个[],isTest 改成个数字或者字符串,下面判断往对应的列表里放就行了
0DBBFF
2021-01-06 16:34:51 +08:00
python 的短板哈哈,格式乱了,不过应该能看懂吧..
lpts007
2021-01-06 16:36:35 +08:00
能问下你为什么要把它存进一个变量里面吗
leebin
2021-01-06 16:38:32 +08:00
@zhuzhuaini 简单的话你就用 json 就行,直接操作字典结构,Python 的 json 包里序列化等函数都是现成的
Osk
2021-01-06 16:50:08 +08:00
python 自带的 ini 解析是支持你的这种格式的,印象中我之前用过,文档里有写
Osk
2021-01-06 16:51:28 +08:00
import ConfigParser

cf = ConfigParser.ConfigParser(allow_no_value=True)
lpts007
2021-01-06 16:56:12 +08:00
@zhuzhuaini 那我文本框里面填了“[测试]”,系统是不是就出 bug 了

所以还是 X-Y 问题
oyasumi
2021-01-06 16:56:39 +08:00
正则表达式
CallMeReznov
2021-01-06 16:57:58 +08:00
这不就是 ConfigParser 该干的事吗。。。

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

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

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

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

© 2021 V2EX