Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用operator.itemgetter()对csv文件进行排序_Python_Csv - Fatal编程技术网

Python 如何使用operator.itemgetter()对csv文件进行排序

Python 如何使用operator.itemgetter()对csv文件进行排序,python,csv,Python,Csv,我在csv文件中有一组值。这些值如下所示。我希望这些值按图层列排序,在下面的示例中,图层列的值为7208和7209。否则,我希望csv文件保持原样。我下面的代码似乎没有正确排序 以下是csv文件: l_d、l_t、utc、SI、utc、La、Lon、H、layer、N、Pr、EId、Pype、BS、Vo、Te、Chs、PT、Pass 01-08,11:00:19,03:00:19,0x037,01-08_02:58:03,无,无,无,7208,无,无,无,无,无,87,15.4,无,无,无,无,

我在csv文件中有一组值。这些值如下所示。我希望这些值按图层列排序,在下面的示例中,图层列的值为7208和7209。否则,我希望csv文件保持原样。我下面的代码似乎没有正确排序

以下是csv文件:

l_d、l_t、utc、SI、utc、La、Lon、H、layer、N、Pr、EId、Pype、BS、Vo、Te、Chs、PT、Pass
01-08,11:00:19,03:00:19,0x037,01-08_02:58:03,无,无,无,7208,无,无,无,无,无,87,15.4,无,无,无,无,无,无
01-08,11:00:19,03:00:19,0x037,01-08_02:58:03,无,无,无,7209,无,无,无,无,无,87,15.4,无,无,无,无,无,无
以下是我当前的代码:

import sys
import csv
import operator

reader = csv.reader(open("M_B.csv"), delimiter=",")

sortedlist = sorted(reader, key=operator.itemgetter(9), reverse=True)

print(sortedlist)

with open("M_B_Sorted.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(sortedlist)

首先,该指数是错误的。它应该是
8

您需要将字符串转换为
int
;不能单独使用
itemgetter

sortedlist = sorted(reader, key=lambda row: int(row[8]), reverse=True)

除此之外,还需要排除标题

import csv

with open("M_B.csv") as fin, open("M_B_Sorted.csv", "wb") as f:
    reader = csv.reader(fin, delimiter=",")
    writer = csv.writer(f)
    header = next(reader)  # <--- Pop header out
    writer.writerow(header) # <--- Write header
    sortedlist = sorted(reader, key=lambda row: int(row[8]), reverse=True)
    writer.writerows(sortedlist)
导入csv
以open(“M_B.csv”)作为fin,open(“M_B_Sorted.csv”,“wb”)作为f:
reader=csv.reader(fin,分隔符=“,”)
writer=csv.writer(f)

header=next(reader)#您需要
key=int(operator.itemgetter(8))
您需要使用
key=lambda row:int(row[8])
加上添加代码跳过第一行,只需将其从读卡器复制到写入器。我的输出文件中缺少最上面的一行well@liv2hak,我更新了答案。请再看一遍。我只需要写几列,不是全部。我可以使用头作为
writer.writerow(头[0],头[1])
来实现这一点。但是这似乎对writer.writerows(sortedlist)@liv2hak不起作用,您需要传递一个序列:对于标题:
writer.writerow([[header[0],header[1]])
writer.writerow(header[:2])
(如果列是前两列)@liv2hak,对于行:
writer.writerows(row[:2]对于sortedlist中的行)