用Python对文本文件中的数字列进行排序

2 投票
4 回答
17501 浏览
提问于 2025-04-17 22:00

我正在尝试对一个文本文件进行排序,这个文件有超过1000个数字,排序的依据是第4列。我可以顺利提取出数字所在的列,但就是无法按升序进行排序。我认为我写的代码是正确的,但我总是遇到以下错误:

'str'对象没有'sort'这个属性

如果能给点建议就太好了!

file = open("MyFile.txt")

column = []  

for line in file:
    column = line[1:].split("\t")[3]

    print (column.sort())

4 个回答

1

因为你提到文件里有用制表符分开的数字,所以你可以用csv模块来处理这个文件。这里提到的'统计'是因为csv文件通常有表头,可以用来标识每一列的内容。如果你的文件没有表头,或者你不想用表头的话,可以直接用列的索引(在你的例子里是3)。如果文件里没有表头行,可以用fieldnames参数来设置列名。

import csv
ifile = open('file.csv', 'rb')
infile = csv.DictReader(ifile, delimiter='\t')
# If the first line does not contain the header then specify the header
try:
  sortedlist = sorted(infile, key=lambda d: float(d['statistic']))
except ValueError:
  #First line was the header, go back and skip it
  ifile.seek(0)
  ifile.next()
  sortedlist = sorted(infile, key=lambda d: float(d['statistic']))
ifile.close()

# now process sortedlist and build an output file to write using csv.DictWriter()
4

line.split() 会返回一个字符串,读取文件中的一行也是返回一个字符串。字符串是不可改变的,也就是说你不能对它进行排序。你可以这样说:

for line in file:
    column.append(float(line[1:].split("\t")[3]))

column.sort()
7

如果我没理解错的话,你是想根据第4列来给排序,对吧?

sorted(open("MyFile.txt").readlines(), key=lambda line: int(line.split('\t')[3]))

这样做应该能让你得到按第4列的整数值排序后的行。

0

试试这段代码:

file = open("a")
column = []

for line in file:
    column.append(int(line.split("\t")[3]))

column.sort()
print(column)

file.close()

这里有什么变化:

  1. line.split("\t") 这个方法会把一行文本按照制表符(Tab)分开,返回一个字符串列表。所以当我们写 column.append(int(line.split("\t")[3])) 时,我们实际上是在选择这个列表的第四个元素,把它转成整数,然后把这个整数加到我们的列表(column)里。
  2. 如果你直接写 print (column.sort()),它会输出排序方法的结果,但这个结果是 None,所以我们需要先对列表进行排序,然后再打印出来。另一种方法是使用 sorted 函数,像这样 print(sorted(column))(想了解区别可以看看 这里
  3. 我们关闭了之前打开的文件,这样就不会出现内存泄漏的问题。

撰写回答