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