将列表元素从String转换为int

时间:2019-11-17 03:29:57

标签: python list csv sorting

我已将csv文件中的数据存储到列表中,并且该列表包含所有字符串元素。 我想使用第一列或第一元素(字符串)对该列表进行排序。我正在考虑将该字符串转换为整数,然后使用list.sort()函数。 这是我的代码,但是由于它将第一个元素作为字符串而不是整数,因此无法正常工作.csv中的一行看起来像 228,Sieur de Duplessis(Le),24.2,47,“ Sharp,lactic” 我想将第一列element(228)转换为整数,然后进行排序。怎么办?

sample = open('file.csv', 'r')

data = csv.reader(sample, delimiter=',')

list_cheese = []  # empty list declaration
next(data)  # skip first line in csv file, column names

for row in sample:
    list_cheese.append(row)

list_cheese.sort(key=operator.itemgetter(0))

# print sorted list items
for elem in list_cheese:
    print elem

file.csv具有超过2000行,但我要共享前三行以提供一些csv文件内容。

CheeseId,CheeseNameEn,CheeseNameFr,ManufacturerNameEn,ManufacturerNameFr,ManufacturerProvCode,ManufacturingTypeEn,ManufacturingTypeFr,WebSiteEn,WebSiteFr,FatContentPercent,MoisturePercent,ParticularitiesEn,ParticularitiesFr,FlavourEn,FlavourFr,CharacteristicsEn,CharacteristicsFr,RipeningEn,RipeningFr,Organic,CategoryTypeEn,CategoryTypeFr,MilkTypeEn,MilkTypeFr,MilkTreatmentTypeEn,MilkTreatmentTypeFr,RindTypeEn,RindTypeFr,LastUpdateDate

228,,Sieur de Duplessis (Le),,Fromages la faim de loup,NB,Farmstead,Fermière,,,24.2,47,,,"Sharp, lactic",Marquée et lactée,Uncooked,Pâte non cuite,9 Months,9 mois,0,Firm Cheese,Pâte ferme,Ewe,Brebis,Raw Milk,Lait cru,Washed Rind,Croûte lavée,2016-02-03

242,,Tomme Le Champ Doré,,Fromages la faim de loup,NB,Farmstead,Fermière,,,24.2,47.9,,,"Sharp, lactic, lightly caramelized","Marquée, lactée et légèrement caramélisée",Uncooked,Pâte non cuite,,,0,Semi-soft Cheese,Pâte demi-ferme,Cow,Vache,Raw Milk,Lait cru,Washed Rind,Croûte lavée,2016-02-03

301,Provolone Sette Fette (Tre-Stelle),Provolone Sette Fette (Tre-Stelle),Tre Stelle (Arla Foods),,ON,Industrial,Industrielle,htt

3 个答案:

答案 0 :(得分:0)

您可以遍历循环,如下所述将当前元素类型从String转换为int,确保您也可以使用lambda进行此操作。

 for element in my_list:
...     print(element)
...     element_int = int(element)

here, if element itself contains a list then, 
you can further access its elements as element[0] and then convert it to int. 

答案 1 :(得分:0)

这应该基于每一行的第一个字段执行数字排序:

sample = open('file.csv', 'r')

data = csv.reader(sample, delimiter=',')

list_cheese = list(data)[1:]

list_cheese.sort(key=lambda fields: int(fields[0]))

# print sorted list items
for elem in list_cheese:
    print elem

答案 2 :(得分:0)

这是一个完整的示例,将其读取,排序并写回到输出文件中。 我使用内置的csv模块来简化读写操作。

import csv
with open('input.csv', mode='r') as csv_file:
    rows = list(csv.DictReader(csv_file))
    headers = rows[0] if rows else [] # Use the first row as the headers
    rows.sort(key=lambda x: int(x['CheeseId'])) # Sort by the CheeseId as an int


with open('output.csv', mode='w') as cheese_file:
    dict_writer = csv.DictWriter(cheese_file, headers)
    dict_writer.writeheader() # Write the headers
    dict_writer.writerows(rows) # Write the rows

See it in action.