Python, как прочитать файл и сохранить разделы в отдельные списки - PullRequest
2 голосов
/ 05 ноября 2019

У меня есть файл keyword.txt, подобный следующему:

    #section1
    keyword1
    keyword2
    ......
    #section2
    keyword3
    keyword4
    ......
    #section3
    keyword5
    keyword6
    ......

В каждом разделе много ключевых слов и много разделов. Мой вопрос: как извлечь каждый раздел в отдельный список следующим образом:

    section1=["keyword1","keyword2"]
    section2=["keyword3","keyword4"]
    ......

Это то, что я сделал, чтобы извлечь номер строки разделителя "#"

separator_numlist=[]
with open("keywords.txt") as f:
    for num,line in enumerate(f):
        if('#') in line:
            separator_numlist.append()
"""
Then read lines between each separator's line number
"""

Есть ли лучшее решение? Также я думаю сохранить эти ключевые слова в XML или json, возможно, чтение разделов из структурированных файлов более эффективно, чем чтение из txt файла.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

вы можете использовать dict:

dic = dict()
with open('output', 'r') as f:
    for i in f.readlines():
        if i.startswith('#'):
            my_key = i.replace("#", "")
            dic_key = my_key.strip()
        else:
            if dic_key in dic:
                dic[dic_key] += [i.strip()]
            else:
                dic[dic_key] = [i.strip()]

Вывод:

{'section1': ['keyword1', 'keyword2'], 'section2': ['keyword3', 'keyword4'], 'section3': ['keyword5', 'keyword6']}

вы также можете импортировать json и использовать его для преобразования:

json_output = json.dumps(dic)
1 голос
/ 05 ноября 2019

Как и LinPy, я бы тоже предложил диктовать:

with open( "split.txt" ) as fpntr:
    data = fpntr.read()

out = {
    y[0] : y[1::] for y in [ x.split() for x in data.split('#') if x] 
    }

print out

дает

{'section3': ['keyword5', 'keyword6'], 'section2': ['keyword3', 'keyword4'], 'section1': ['keyword1', 'keyword2']}

if x предназначен для устранения пустых укусов.

...