这是我的python脚本,用于按列从stdin读取的csv文件:
with sys.stdin as csvfile:
reader = csv.reader(csvfile, delimiter=',')
sortedlist = sorted(reader, key=operator.itemgetter(2))
for row in sortedlist:
print(','.join(row)),
print('\n'),
我运行命令以按第3列排序(零索引为2):
./sorter1.py < test.csv > test_sorted.csv
和排序后的文件test_sorted.csv是:
31,53,101,122
88,95,103,59
66,58,104,50
93,46,105,52
88,88,118,107
**115,57,31,34**
110,87,36,63
32,108,36,107
75,35,57,35
99,46,57,28
41,35,67,59
108,99,98,35
36,66,98,60
它就像排序了两个文件并合并它。这是读者的缓冲区大小还是排序方法的问题?
按字母顺序排序,而非按数字排序
答案 0 :(得分:1)
按字母顺序排序,而非按数字排序
您必须将排序列值转换为整数才能进行数字排序。我已将sort函数替换为lambda
,其中包含转换为int
:
sortedlist = sorted(reader, key=lambda x: int(x[2]))