我的文本文件包含一些整数值,如下所示:
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很新。所以如果有人能用解决方案来解释整个案例,那对我来说会非常有帮助。提前谢谢。
答案 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) 现在列表包含所有其他符号将跳过的所有数字