跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 读取 TXT 如何按照关键行提取内容
未分類
1 1 月 2021

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

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

資深大佬 : zhuzhuaini 3

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

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

大佬有話說 (26)

  • 資深大佬 : mckelvin

    建议不要自己编造出一个新的配置格式然后自己做解析,如果你使用现成格式的话就不用考虑这些问题。
    现成的格式可以是 yaml, json, ini, toml, …

  • 主 資深大佬 : zhuzhuaini

    @mckelvin 我刚刚想到用 ini 了 但是 ini 似乎只能读取类似键值对的形式 想直接读取测试下面的所有内容似乎不行 他似乎需要 XXX=YYY 然后通过 XXX 去读取 YYY 这样

  • 資深大佬 : 0DBBFF

    是我没看明白还是太简单,直接打开文件读不就行了,最多加点判断条件

  • 資深大佬 : jdhao

    直接循环读取文本行解析就行了,难点在哪

  • 資深大佬 : TimePPT

    json 不好么
    [{‘测试’: [‘你好’,’你很好’]}, {‘正式’: [‘我好’,’我很好’]}]

  • 資深大佬 : bytesfold

    deque,Python Cookbook 第一章 1.3 节

  • 資深大佬 : xiaolinjia

    你需要的是配置文件的格式,然后用 python 自带的 ConfigParser 模块去读就行了。

  • 資深大佬 : Jackeriss

    用正则不就可以了吗?

  • 主 資深大佬 : zhuzhuaini

    @jdhao 难点在于 怎么把两个[]中间的内容放入一个变量中

  • 資深大佬 : leebin

    正常来讲像上面说的用正常的格式去存储就行,非要解析当前这种文本的话,按行读取,用正则匹配,读取到一个[]后,新建一个变量,把读到下一个[]前的内容存到这个变量中就行。不知道这样是否符合你想做的事

  • 主 資深大佬 : zhuzhuaini

    @leebin 听起来靠谱…我琢磨下,,,其实我目前所做的事情是这样的,我有一个 TXT,里面有 8 个[],我写了个 GUI,里面有 8 个文本框 我想把这 8 个[]下面的内容 放入这 8 个文本框里面,然后我自由的修改文本框里的内容,然后还能保存,保存的格式就是刚刚说的[]下面然后内容,这样方便下一次的读取和修改,,,不知道大佬有没有更简单的实现方案

  • 資深大佬 : 0DBBFF

    @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

    python 的短板哈哈,格式乱了,不过应该能看懂吧..

  • 資深大佬 : lpts007

    能问下你为什么要把它存进一个变量里面吗

  • 資深大佬 : leebin

    @zhuzhuaini 简单的话你就用 json 就行,直接操作字典结构,Python 的 json 包里序列化等函数都是现成的

  • 資深大佬 : Osk

    python 自带的 ini 解析是支持你的这种格式的,印象中我之前用过,文档里有写

  • 資深大佬 : Osk

    import ConfigParser

    cf = ConfigParser.ConfigParser(allow_no_value=True)

  • 資深大佬 : lpts007

    @zhuzhuaini 那我文本框里面填了“[测试]”,系统是不是就出 bug 了

    所以还是 X-Y 问题

  • 資深大佬 : jiangwenwenmodes

    正则表达式

  • 資深大佬 : CallMeReznov

    这不就是 ConfigParser 该干的事吗。。。

  • 資深大佬 : saulshao

    17# 给出了一个完整的解决方案,就照他说的干就行了

  • 主 資深大佬 : zhuzhuaini

    @0DBBFF 感谢!我可以琢磨下 应该能看懂
    @lpts007 存变量里是为了每个文本框都去显示对应变量里的值….如果文本框填了的话,确实会出 bug,但是是我自己来修改这个内容 所以我避免掉这个问题即可
    @leebin 好的 我看下 感谢
    @Osk 了解了 现在我通过大家的回复看到了很多的解决方案,我都去试试找一个最方便的
    @saulshao 好的 !
    @CallMeReznov configparser 我之前试了下 发现他只能读取键值对里的值,无法获取整块内容,而我的格式正好不是键值对的形式 17 给了一个方案,我先试下

  • 資深大佬 : guhuisec

    with open(“/Users/yx/PycharmProjects/question/a.txt”) as fr:
    items=fr.readlines()

    find={ “[测试]”:[],”[正式]”:[],}
    def get(some,store):
    if items[i].strip()==some and i+1<len(items):
    for v in items[i+1:]:
    if v[0]!='[‘:
    store.append(v.strip())
    for i in range(len(items)):
    if items[i].strip() in list(find.keys()):
    get(items[i].strip(),find[items[i].strip()])

  • 資深大佬 : guhuisec

    def get(some, store):
    if items[i].strip() == some and i + 1 < len(items):
    for v in items[i + 1:]:
    if v[0] != ‘[‘:
    store.append(v.strip())

    with open(“/Users/yx/PycharmProjects/question/a.txt”) as fr:
    items=fr.readlines()
    for i in range(len(items)):
    if items[i].strip() in list(find.keys()):
    get(items[i].strip(),find[items[i].strip()])

  • 資深大佬 : yaoweilei

    [[email protected] tmp]# cat ini.ini
    [test1]
    key1=value
    key2

    [test2]
    key3=value3
    key4
    [[email protected] tmp]# cat test.py
    import ConfigParser
    cf = ConfigParser.ConfigParser(allow_no_value=True)
    cf.read(“./ini.ini”)
    print(cf.sections())
    print(cf.options(“test1”))
    print(cf.items(“test1”))
    [[email protected] tmp]# python test.py
    [‘test1’, ‘test2’]
    [‘key1’, ‘key2’]
    [(‘key1’, ‘value’), (‘key2’, None)]

    17 方案的 py2.7 的实践结果,py3 里面的改名叫 configparser 了,换一下应该就可。

  • 資深大佬 : yucongo

    pydantic + dotenv

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具