如何使这个按字母顺序排列的列表在python的输出中看起来更好

时间:2017-10-26 01:15:25

标签: python list file-io

它在很大程度上起作用,但输出看起来很糟糕,所以我怎么能够清理它我还想知道如果可能的话如何短语伪代码。

#open file with list
infile  = open("unsorted_fruits.txt", "r") 
#open file writing to
outfile = open("sorted_fruits.txt", "w")      
#create variable to work with list
all_lines = infile.readlines()              
for line in all_lines:                      
    print (line,)          

#this function has sorted other list
def insertion_sort(list):                   
    for index in range(1, len(list)):
        value = list[index]
        i = index - 1
        while i >= 0:
            if value < list[i]:
                list[i+1] = list[i]
                list[i] = value         
                i = i - 1               
            else:
                break  

#calling the function to sort 
insertion_sort(all_lines)                   
all_sorted = str(all_lines)                                                                  
#print list to show its sorted
print (all_sorted)
#write the sorted list to the file
outfile.write(all_sorted)                                    

infile.close()                              
outfile.close()
exit() 

输入:木瓜

猕猴桃

zapote blanco

越橘

香蕉

石灰

xigua

香草

yiessas

罗望子

umkolo

木瓜

苹果

imbu

接骨木

juneberry

芒果

草莓

油桃

日期

樱桃

西瓜

葡萄

覆盆子

输出:['\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n' ,'\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n' ,'\ n','\ n','\ n','\ n','\ n','\ n','apple \ n','banana \ n','cherry \ n',' date \ n','elderberry \ n','fig \ n','grape \ n','huckleberry \ n','imbu \ n','juneberry \ n','kiwifruit \ n','lime \ n','mango \ n','nectarine \ n','orange \ n','papaya \ n','quince \ n','raspberry \ n','strawberry \ n','tamarind \ n' ,'umkolo \ n','vanilla \ n','西瓜\ n','xigua \ n','yiessas \ n','zapote blanco \ n']

3 个答案:

答案 0 :(得分:0)

这可能是由于文件末尾有额外的换行符,这些换行符正在readlines()函数中被选中。

当您打印最终列表中的每个项目时,只过滤掉那些只是新行的项目:

for word in all_sorted:
    if word.rstrip('\n'):
        print(word.rstrip('\n'))

rstrip()函数(右边条)删除单词末尾的所有换行符。如果单词只是一个新行,那么rstrip将返回一个空字符串,该字符串由if语句过滤掉。

答案 1 :(得分:0)

这不是输出问题。这是你阅读水果列表的方式。你真的想要排序 fruits ,而不是

输入文件中的许多行都是空白的,并且您不想包含它们。而且你可能并不想要考虑尾随&#39; \ n&#39;作为每种水果的一部分,或者。

因此,我建议不要迭代infile.readlines(),而是通过infile.read()。splitlines()进行迭代。这将自动删除尾随\ n。当你正在做它时,你可以删除空白行。

with open('unsorted_fruits.txt', 'r') as infile:
    fruits = [f for f in infile.read().splitlines() if f != '']

然后你可以分类水果而不是线。如果您不想将最终输出写为Python列表的字符串表示形式,则可以使用print()。

for fruit in fruits:
    print(fruit, file=outfile)

或者file.writelines()

outfile.writelines(f + '\n' for f in fruits)

答案 2 :(得分:0)

现在使用此代码输出文件如下所示。任何人都有建议让它看起来更好。 applebananacherrydateelderberryfiggrapehuckleberryimbujuneberrykiwifruitlimemangonectarineorangepapayaquinceraspberrystrawberrytamarindumkolovanillawatermelonxiguayiessaszapote blanco ['\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','\ n','apple \ n','banana \ n','cherry \ n','date \ n ','接骨木\ n','fig \ n','葡萄\'','huckleberry \ n','imbu \ n','juneberry \ n','kiwifruit \ n','lime \ n', 'mango \ n','nectarine \ n','orange \ n','papaya \ n','quince \ n','raspberry \ n','strawberry \ n','tamarind \ n','umkolo \ n','vanilla \ n','西瓜\ n','xigua \ n','yiessas \ n','zapote blanco \ n']

#open file with list
infile  = open("unsorted_fruits.txt", "r") 
#open file writing to
outfile = open("sorted_fruits.txt", "w")      
#create variable to work with list
all_lines = infile.readlines()              
for line in all_lines:                      
    print (line,)          

#this function has sorted other list
def insertion_sort(list):                   
    for index in range(1, len(list)):
        value = list[index]
        i = index - 1
        while i >= 0:
            if value < list[i]:
                list[i+1] = list[i]
                list[i] = value         
                i = i - 1               
            else:
                break  

#calling the function to sort and make it look nicer
insertion_sort(all_lines)
for word in all_lines:
    if word.rstrip('\n'):
        print(word.rstrip('\n'))
for word in all_lines:
    if word.rstrip('\n'):
       outfile.write(word.rstrip('\n'))

all_sorted = str(all_lines)

#write the sorted list to the file
outfile.write(all_sorted)                                    

infile.close()                              
outfile.close()
exit()