尝试用Python读取数字文本文件到列表并排序
我有一个一行的文本文件,叫做file1.txt,里面有一串10个数字,格式是这样的:
10,45,69,85,21,32,11,71,20,30
我想把这些数字从文本文件中提取出来,然后放到一个列表里,接着把这些数字按从小到大的顺序排列。
我试过这样做:
myfile1 = open('file1.txt', 'r').readlines()
但是这样似乎只给我一个长度为1的列表,显然是不能排序的。
In [101]: myfile1
Out[101]: ['10,45,69,85,21,32,11,71,20,30']
我猜可能是我读取文本文件的方式有问题,但我找不到合适的方法。
2 个回答
2
这个代码有点复杂,因为它把所有操作都写成了一行,但基本上是这样做的:
with open('file1.txt', 'r') as f:
data = sorted(map(int, f.readline().split(',')))
这个代码的功能:
- 读取一行内容:
f.readline()
- 把这一行按照逗号
','
分开:.split(',')
- 把分开的字符串转换成整数:
map(int, list)
- 对这些整数进行排序:
sorted(list)
2
.readlines() 这个方法的意思就是:它会一行一行地读取文件。在你的例子里,文件只有一行,所以长度就是1。
对于这一行,你需要根据逗号来分割:
with open(file1.txt,'r') as myfile:
for line in myfile:
print sorted(map(int, line.split(',')))
或者,如果你有多行并且里面有很多数字:
data = []
with open(file1.txt,'r') as myfile:
for line in myfile:
data.extend(map(int, line.split(',')))
print sorted(data)
在这里,我使用了 with 这个关键词来打开文件,这样可以一行一行地读取。然后,我对每一行使用 split 方法,这个方法会把每一行变成一个字符串列表。接着,我用 map 函数把这些字符串转换成整数,方法是对列表中的每个项目应用 int 类型转换函数。这样得到的列表就可以进行排序了。记得去看看 Python 文档中的 字符串方法页面。
没有输入文件的测试:
numbers = "10,45,69,85,21,7,32,11,71,20,30"
data = []
data.extend(map(int, numbers.split(',')))
print sorted(data)
输出结果是
[7, 10, 11, 20, 21, 30, 32, 45, 69, 71, 85]