程序将文本转换为列表

时间:2019-04-19 02:29:51

标签: python

我正在尝试编写返回列表中有序文本的程序。

文本文件示例:

sayndz zfxlkl attjtww cti sokkmty brx fhh suelqbp
xmuf znkhaes pggrlp zia znkhaes znkhaes
nti rxr bogebb zdwrin
sryookh unrudn zrkz jxhrdo gctlyz

我的想法是将文本划分为列表元素,其中每一行都是一个列表元素,然后我再次尝试将每一行划分为列表,其中每个单词都是列表元素。在大多数作品中,但最后我只将第一行文本更改为列表。

这就是我得到的: ['sayndz','zfxlkl','attjtww','cti','sokkmty','brx','fhh','suelqbp']

这是我的代码:


class SkyphrasesValidation(object):

    def get_text_file(self):
        file = open('C:/Users/PC/Documents/skychallenge_skyphrase_input.txt', 'r')
        return file

    def lines_list(self):
        text = self.get_text_file()
        lines_list = text.readlines()
        return lines_list

    def skyphrase_list(self):
        for line in self.lines_list():
            words_list = line.split()
            return words_list

    def __str__(self):
        return str(self.skyphrase_list())

text = SkyphrasesValidation()

print(text)



3 个答案:

答案 0 :(得分:1)

delete query中,您需要像这样构造一个列表:

skyphrase_list

但是,有一种更好的方法可以解决所有这些问题。我将让您将其改编成一个类,但是在裸露的代码中,它看起来像:

def skyphrase_list(self):
    words_list = []
    for line in self.lines_list():
        words_list.append(line.split())
    return words_list

答案 1 :(得分:1)

with open('C:/Users/PC/Documents/skychallenge_skyphrase_input.txt', 'r') as infile: words_list = [line.split() for line in infile] 中,您需要将单个单词列表追加到更大的列表中,还应该忽略空行,这会为您提供一个列表列表,每个列表对应一行。

skyphrase_list

然后,预期的输出可能如下所示,不确定是否正是您要的。

def skyphrase_list(self):
    bigger_list = []
    for line in self.lines_list():
        if line:
            bigger_list.append(line.split())
    return bigger_list

答案 2 :(得分:1)

对于您的特定问题,我认为问题在于skyphrase_list()中的return语句。具体来说:

    def skyphrase_list(self):
        for line in self.lines_list():
            words_list = line.split()
            return words_list

此行中发生的事情是,它开始循环,然后在拆分该行之后,返回第一个结果-实际上并没有遍历整个列表。

因此,这应该可以解决问题,但是在此之后,我将显示另一种方式:

    def skyphrase_list(self):
        rtn = []  # create a list to hold the loop processing
        for line in self.lines_list():
            words_list = line.split()
            rtn.append(words_list)  # tack on the parsed line to the return object
        return rtn  # do the return outside of the loop

但是您这样做的方式对我来说有点奇怪。这是解决此问题的方法:

def read_file(path):
    with open(path, 'r') as fh:
        return fh.read()  # to make sure you properly close the file. You can do more processing here as well if you're so inclined.

def to_word_list(body):
    lines = body.split()  # the initial split, as you have it
    return [line.split() for line in lines]  # a split on each level, represented as a list comprehension

这条路线的代码少得多,并且与课程无关,但是您的需求可能有所不同。