尝试用Python读取数字文本文件到列表并排序

1 投票
2 回答
8601 浏览
提问于 2025-04-21 08:24

我有一个一行的文本文件,叫做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(',')))

这个代码的功能:

  1. 读取一行内容:f.readline()
  2. 把这一行按照逗号','分开:.split(',')
  3. 把分开的字符串转换成整数:map(int, list)
  4. 对这些整数进行排序: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]

撰写回答