我正在尝试按包含超过1000个数字的第4列对文本文件进行排序。我可以隔离数字列,但我无法按升序排序。这是我认为是正确的。但我不断收到以下错误:
'str'对象没有属性'sort'
任何建议都会很棒!
file = open("MyFile.txt")
column = []
for line in file:
column = line[1:].split("\t")[3]
print (column.sort())
答案 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()
发生了什么变化:
line.split("\t")
返回一个字符串列表,所以做column.append(int(line.split("\t")[3]))
我们选择这个列表的第四个元素,将它转换为一个整数并将这个整数添加到我们的列表中(列)print (column.sort())
将打印排序方法的输出,即None
,因此我们首先必须在打印之前对列表进行排序。另一个解决方案是使用已排序的函数print(sorted(column))
(参见here但也看不出差异)