【问题标题】:split in two list a txt file python一分为二列出一个txt文件python
【发布时间】:2019-12-11 18:25:59
【问题描述】:

我需要最快的方式来读取一个 txt 文件并返回 2 个列表。

文件以一些空行开头,然后有一个需要在列表中分配的 n*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"]

【问题讨论】:

  • 文件实际上是否在这些行中包含 \n 或者这只是一个文字?在这种情况下,请删除所有 \n 并留下空白行。文件本身是否也在顶部包含example.txt?如果不是,请将您的问题重新格式化为文件的实际外观。
  • 嗨,对不起,\n 表示空行

标签: python list file text


【解决方案1】:

一种可能的解决方案是使用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']

【讨论】:

  • 还有什么不使用外部库的方法吗?
  • @3dvolt 好吧,itertools (docs.python.org/3.5/library/itertools.html) 在标准库中 - 很高兴知道它。它使这些显然“困难”的任务变得容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多