我正在尝试使用插入排序对输入文件中的数据进行排序,但代码似乎不起作用!我复杂了吗?任何帮助将不胜感激!
input_file = open('C:\\Users\\Desktop\\data.txt', 'r')
for line in input_file:
print line
def insertion_sort(items):
for i in range (1, len(items)):
j=i
while j>0 and items[j]<items [j-1]:
temp = items[j]
items [j]=items[j-1]
items [j-1]=temp
j=j-1
insertion_sort(input_file)
print 'After sorting:', input_file
input_file.close()
答案 0 :(得分:3)
您传递给insertion_sort
的内容是文件对象。它看起来好像你的insertion_sort
函数需要更像 list 的东西,它的内容可能会混乱。
文件对象是&#34;可迭代的&#34;,其中(除其他外)意味着你可以从其内容中列出一个列表:list(input_file)
将是一个列表,每行一个元素文件。但请注意,迭代线 - 就像你在开始时做的那样 - 移过它们,并且在打印完所有行list(input_file)
之后将是一个空列表。因此,如果您想从文件中创建一个列表,则应在打开文件后立即执行此操作。
更改列表不会更改文件的内容。如果你想这样做,你需要再次写出来。
答案 1 :(得分:0)
通过查看您的代码,我猜它在排序列表中没有输出任何内容,原因很简单,因为您已经耗尽了生成器从文件中返回行以按未排序顺序打印它。
将行存储在列表中并对其进行迭代以进行打印,然后您仍可以稍后重复使用该列表进行处理。
input_file = open('C:\\Users\\Desktop\\data.txt', 'r')
input_lines = input_file.readlines()
for line in input_lines:
print line
insertion_sort(input_lines)
答案 2 :(得分:0)
您可以尝试这样的事情:
#use 'with' statement so context manager will handle possible exceptions and close file
with open('C:\\Users\\Desktop\\data.txt', 'r'):
def insertion_sort(sort_list):
for i in range(0, len(sort_list)):
j = i
while j > 0 and sort_list[j - 1] < sort_list[j]:
#some sugar to avoid temp variable
sort_list[j - 1], sort_list[j] = sort_list[j], sort_list[j - 1]
j = j - 1
#make a list of file iterator
list_to_sort = list(input_file)
print 'Before:', list_to_sort
insertion_sort(list_to_sort)
print 'After:', list_to_sort
正如上面的答案中提到的那样,当你打开文件时,你会得到一个迭代器。如果你想要一个可以玩的对象(修改它的内容),你肯定可以列出这个迭代器。当你以只读模式打开文件时,你无法在那里写出我们函数的结果。如果您需要将结果写回您的文件,您应该在&#39; r +&#39;中打开它。模式为&#39; r&#39;是只读的。