gpt4 book ai didi

python - 按数值对 csv 进行排序

转载 作者:行者123 更新时间:2023-11-28 21:51:48 32 4
gpt4 key购买 nike

我正在查看和阅读以前与我类似的问题和答案,但没有找到适合我的案例的解决方案。

我有一个包含 2 列的 csv 文件。一种是数值(100、40、350等),另一种是图片标签名称列表(即computer.jpg)。

我想要做的是按第一列(即值)以升序方式对文件进行排序。这也意味着我希望这对值(图像名称)随之移动。

这是我目前所拥有的:

import csv
import operator
sample=open('random.csv', "r")
csv1=csv.reader(sample, delimiter='.')
header=next(csv1, None)
sort= sorted(csv1, key=operator.itemgetter(0))

with open('randomized.csv', "wb") as f:
csv_writer=csv.writer(f, delimiter='.')
if header:
csv_writer.writerow(header)
csv_writer.writerows(sort)

然而,结果排序列表是这样的:100、175、20、250、3。

我尝试了一些其他的代码,像这样:

sort=csv1.sort(key=lambda row: row[0], reverse=True)

但是我收到一个错误:AttributeError: '_csv.reader' object has no attribute 'sort'

我读到过一个选项,即在排序之前将数字转换为字符串,然后在写入文件之前将它们转换回数字,但实际上并没有执行此操作的工具。

有谁知道如何把这个弄下来吗?

最佳答案

您需要转换为 int:

srt= sorted(csv1, key=lambda x: int(x[0]))

您正在对 100 < 12 处的字符串进行排序

sort=csv1.sort(key=lambda row: row[0], reverse=True)给你一个错误,因为 csv1是一个阅读器对象而不是一个列表,你必须调用 listreader 上对象,但您也可以只使用排序。

您可以看到使用 int 会产生非常不同的输出:

In [46]: l = ["100","2","12","200"]

In [47]: sorted(l)
Out[47]: ['100', '12', '2', '200']

In [48]: sorted(l,key=lambda x: int(x))
Out[48]: ['2', '12', '100', '200']

Python 按字符对字符串进行排序,具有较大值的第一个字符将被视为较高值,因此在第一个排序输出中,100 被视为 < 12,因为 2 > 0。

综合起来:

import csv

with open('random.csv') as sample, open('randomized.csv', "w") as out:
csv1=csv.reader(sample)
header = next(csv1, None)
csv_writer = csv.writer(out)
if header:
csv_writer.writerow(header)
csv_writer.writerows(sorted(csv1, key=lambda x:int(x[0])))

输出将是:

value, image
50, bottle.jpg
75, broomstick.jpg
175, book.jpg
100, car.jpg

这不是将数据放在一列中,,是分隔每一列的内容,即逗号分隔值。

关于python - 按数值对 csv 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29336621/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com