它在很大程度上起作用,但输出看起来很糟糕,所以我怎么能够清理它我还想知道如果可能的话如何短语伪代码。
#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']
答案 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()