将文件中的数据添加到列表中以进行排序

时间:2015-03-01 09:15:22

标签: python

我的文本文件包含一些整数值,如下所示:

100
200
300
400
500
600
700
800
900
1000

我想将它们添加到列表中,然后对它们进行排序并打印排序列表。我尝试过类似的东西:

file = open("sample.txt","r")
list1 = []

for line in range(1,11):
    data = file.readline(line)
    list1.append(data)

sortedlist = list1.sort(key=int)
print sortedlist
file.close()

但我得到了一个错误:

Traceback (most recent call last):
  File "o_2.py", line 8, in <module>
    sortedlist = list1.sort(key=int)
ValueError: invalid literal for int() with base 10: ''

当我检查列表而没有排序时,它就像是:

['1', '00', '\n', '200\n', '300\n', '400\n', '500\n', '600\n', '700\n', '800\n']

我实际上对python很新。所以如果有人能用解决方案来解释整个案例,那对我来说会非常有帮助。提前谢谢。

2 个答案:

答案 0 :(得分:3)

你正在读错列表; readline不接受行号,但每行的最大字符数

  

file.readline([size])

     

从文件中读取整行。尾随换行符保留在字符串中(但在文件结束时可能不存在)   用不完整的线)。 [6] 如果size参数存在且   非负数,它是最大字节数(包括尾随数)   换行符。可能会返回不完整的行。当大小不为0时,   仅在立即遇到EOF时才返回空字符串。

如果您刚刚file.readline()

,您的代码就会有用
for line in range(1,11):
    data = file.readline()
    list1.append(data)

当前代码尝试只读取第一行行的1,2和3个字符,从而生成'1''00''\n'换行符单独阅读,然后是第2行('200\n')等的最多4个字符。


然而它也不是非常pythonic;我会把它写成:

with open("sample.txt") as file:
     list1 = [ int(line) for line in file ]

sortedlist = list1.sort()
print sortedlist

with会在缩进块的末尾自动关闭文件。文件的for循环会自动遍历其行; [ expression for var in iterable ]是列表理解,这是一种较短的做法:

result = []
for var in iterable:
    result.append(expression)

或者正如Jon Clements建议的那样,如果你真的想用它们的数值对行进行排序,而是将它们保持为字符串:

with open('sample.txt') as file:
    list1 = list(file)  # all lines as a list
    print sorted(list1, key=int)

答案 1 :(得分:-1)

您的代码不会删除空格和换行符。

导入重新    TXT =开放(&#39;文件&#39)。读()    List = Re.findall(&#39; \ d&#39;,txt)    现在列表包含所有其他符号将跳过的所有数字