簡體   English   中英

分成兩個列表一個txt文件python

[英]split in two list a txt file python

我需要最快的方式來讀取 txt 文件並返回 2 個列表。

該文件以一些空行開始,然后有一個 *m 表需要在列表中分配,然后是一些空行和一個單詞列表,每行可能包含 1 個或多個用空格分隔的單詞

這就是我所做的,但在我看來是緩慢的,可能我正在尋找迭代的東西

        with open(file) as f:
            sub = ''
            matrix = []
            word = []
            c = 0
            a = False
            for line in f:
                if line == '\n':
                    if c == 1:
                        a = True
                    continue
                if a:
                    l = line.split()
                    for x in l:
                        word.append(x)
                else:
                    sub = line.strip('\n')
                    matrix.append(sub)
                    c = 1
        f.close()
        matrix = [x.upper() for x in matrix]
        word = [x.upper() for x in word]
        return matrix, word

一個示例文件應該是:'\\n' 是一個空行

example.txt:
\n
\n
\n
jebvoqbfvqoif
feqbfoeqbfoie
qfenfoeiqnfoi
ejfnqoeifboqe
nefoineoifneo
nfeqiofhneoif
enfqoinfeoifn
fewknfoiewnfn
\n
\n
\n
efwhhewof eiwofoiefw fwnenfif
wefioh
wfeno
ewfioef
oefkofeofo

輸出應該是:

list 1:
[
"jebvoqbfvqoif",
"feqbfoeqbfoie",
"qfenfoeiqnfoi",
"ejfnqoeifboqe",
"nefoineoifneo",
"nfeqiofhneoif",
"enfqoinfeoifn",
"fewknfoiewnfn"]
list 2:
[
"efwhhewof",
"eiwofoiefw", 
"fwnenfif",
"wefioh",
"wfeno",
"ewfioef",
"oefkofeofo"]

一種可能的解決方案是使用itertools.groupbyitertools.chain (文件sample.txt包含您在問題中陳述的文本)

例如:

from itertools import groupby, chain

with open('sample.txt', 'r') as f_in:
    matrix, words = [[*chain(*map(str.split, g))] for v, g in groupby(map(str.strip, f_in), lambda k: k != '') if v]

from pprint import pprint
pprint(matrix)
pprint(words)

印刷:

['jebvoqbfvqoif',
 'feqbfoeqbfoie',
 'qfenfoeiqnfoi',
 'ejfnqoeifboqe',
 'nefoineoifneo',
 'nfeqiofhneoif',
 'enfqoinfeoifn',
 'fewknfoiewnfn']
['efwhhewof',
 'eiwofoiefw',
 'fwnenfif',
 'wefioh',
 'wfeno',
 'ewfioef',
 'oefkofeofo']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM