我正在尝试编写返回列表中有序文本的程序。
文本文件示例:
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)
答案 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
这条路线的代码少得多,并且与课程无关,但是您的需求可能有所不同。