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

时间:2014-03-12 19:23:35

标签: python sorting

我正在尝试按包含超过1000个数字的第4列对文本文件进行排序。我可以隔离数字列,但我无法按升序排序。这是我认为是正确的。但我不断收到以下错误:

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

任何建议都会很棒!

file = open("MyFile.txt")

column = []  

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

    print (column.sort())

4 个答案:

答案 0 :(得分:5)

如果我是对的,您是否正在尝试对进行排序,使用第4列作为索引,不是吗?

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

应该为您提供行,按第4个制表符拆分列的整数值排序。

答案 1 :(得分:4)

line.split()返回一个字符串,读取文件中的一行也是如此。您无法对string进行排序,因为它是不可变的。你可以说:

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

column.sort()

答案 2 :(得分: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()

答案 3 :(得分: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")返回一个字符串列表,所以做column.append(int(line.split("\t")[3]))我们选择这个列表的第四个元素,将它转换为一个整数并将这个整数添加到我们的列表中(列)
  2. 执行print (column.sort())将打印排序方法的输出,即None,因此我们首先必须在打印之前对列表进行排序。另一个解决方案是使用已排序的函数print(sorted(column))(参见here但也看不出差异)
  3. 我们关闭了我们打开的文件,没有内存泄漏