2015-04-29 3 views
2

я использую Python для проекта и есть данные в .txt файл, который изложен, как это, напримерPython - Как преобразовать столбец CSV с данными числа в целые

Brazil.800000 
United Kingdom.1200000 
Zimbabwe.5000 

Первый ' column '- страна, а второй столбец - это числовые данные. Они разделены периодом. Моя задача - сортировать данные численно. Мне удалось сделать некоторый прогресс, используя приведенный ниже код из учебника, которое я нашел.

import csv 
import operator 

inputFileName = ("worldpop(2).txt") 
infile = open(inputFileName, "r") 

csv1 = csv.reader(infile, delimiter = ".") 

sort = sorted(csv1, key = operator.itemgetter(1)) 

for eachline in sort: 
    print(eachline) 

Однако, в то время как это сортирует данные по второй колонке, он рассматривает числовые данные в виде строк, а не целые числа. Что означает, что результат получается как:

United Kingdom.1200000 
Zimbabwe.5000 
Brazil.800000 

Я полностью застрял на том, как получить эту программу, чтобы увидеть второй столбец как фактические числа. Можете ли вы помочь?

Большое спасибо.

Редактировать: Чтобы уточнить, я не пытаюсь изменить фактический файл, а просто распечатываю данные отсортированным способом в IDLE.

ответ

4

Заменить ключевую функцию в вашем рода заявления с той, которая преобразует значения целых

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

Вы должны преобразовать число в int так что вы должны изменить ключ:

key=lambda x:int(x[1]) 

Кроме того, в качестве более питонического способа используйте with *, чтобы открыть файлы, вместо этого открыв файл без закрытия! sorted функция с правильным ключом, который сортирует строки на основе int чисел:

>>> import csv 
>>> from operator import itemgetter 
>>> with open('infile.txt', 'r') as csvfile: 
...  spamreader = csv.reader(csvfile, delimiter='.') 
...  for row in sorted((i for i in spamreader),key=lambda x:int(x[1])): 
      print row 

результат:

['Zimbabwe', '5000'] 
['Brazil', '800000'] 
['United Kingdom', '1200000'] 

Также вы можете использовать reverse=True аргумент в sorted функции, чтобы получить результат нисходящую:

['United Kingdom', '1200000'] 
['Brazil', '800000'] 
['Zimbabwe', '5000'] 

* заявление with будет закрывать файлы после завершения этого процесса!

Смежные вопросы