2016-01-13 2 views
3

На данный момент я пытаюсь отсортировать файл с данными, такие как:Сортировка списков по колонку

[Name] [Score] 
[Name] [Score] 

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

[Name] [Score] [Name] [Score] 

Я хочу, чтобы это было:

[Name] [Score] 
[Name] [Score] 

затем написать, что в файл вместо

def fileWrite(fName, fClass): 
    fileName = "%s %s" %(fClass, ".txt") 
    fileName = fileName.replace(" ", "") 
    return(fileName) 

def fileSort(fName, fClass): 
    fSort = open(fName, "a+") 
    contents = [] 
    i = getFileData(fName) 
    for getData in range(i): 
     data1 = fSort.readline() 
     replaceWith = "%s %s" %(fClass, ";") 
     data1 = data1.replace(fClass, replaceWith) 
     contents.append(data1) 
    contents.sort() 
    print contents 
    fSort.truncate(0) 
    fSort.write(contents) 

def getFileData(fName): 
    i = 0 
    with open(fName) as f: 
     for i, l in enumerate(f): 
      pass 
    return i + 1 

Здесь это некоторые данные из файла, который мне нужно отсортировать:

Reece 10 
John 4 
Alex 7 
Alex 8 
John 4 
Alex 6 
Reece 9 
+0

Похоже, вам нужно использовать ' застежка-молния() '. Не могли бы вы добавить небольшой отрывок из вашего файла? – Gabriel

+0

Я вообще не знаком с этой функцией. Я еще не так хорош на Python. – Reece

+0

Это нормально, вот этот форум для :) Если бы вы могли добавить к вашему вопросу немного файла данных, который вы обрабатываете (всего несколько строк), мы могли бы помочь вам решить эту проблему. – Gabriel

ответ

3

Вы должны дать pandas.

У вас не будет установленных pandas с вашим python. Поэтому сначала вам придется установить его - pip install pandas или easy_install pandas - для чего вам понадобится python-setuptools. Установите их с помощью sudo apt-get install python-setuptools.

import pandas 
# Read your file as a dataframe in Pandas. 
# "sep" is your delimiter "header" row index are options 
myData = pandas.read_csv("/path/to/file.txt",sep=",",header=0) 
# Now sort with your column key 
sortData = myData.sort(['score']) 
# Write out your dataframe to csv 
sortData.to_csv("/path/to/output.txt",sep=",",index=False,header=True) 

Я пристанищем попробовал на эти данные - в некотором файле file.txt

name,score 
Reece,10 
John,4 
Alex,7 
Alex,8 
John,4 
Alex,6 
Reece,9 

Выход -

name,score 
John,4 
John,4 
Alex,6 
Alex,7 
Alex,8 
Reece,9 
Reece,10 

Edit: индекс заголовок изменен на 0 вместо 1

+0

Это хороший и простой в использовании ответ. OP является новым для Python, хотя, возможно, вы можете добавить небольшое описание по очереди того, что делает ваш код? Поскольку комментарии в коде будут замечательными. – Gabriel

4

You можете сначала загрузить данные в пары следующим образом:

pairs = [l.strip().split(' ') for l in open('data.txt', 'r')]  

Теперь вы можете сортировать их, как это:

pairs.sort(key = lambda name_score: int(name_score[1])) 

Наконец, вы можете изменить их обратно в строку, как это:

'\n'.join(name_score[0] + ' ' + name_score[1] for name_score in pairs) 

Вы можете просто open файл, и write эту строку в нее.

1

Do как это,

Получить содержимое файла:

with open(yourfile, "r") as f: 
    data = [l.split(" ") for l in f] 

разбирайтесь:

sortedList = sort(data, key=lambda x: int(x[1])) 

или с помощью itemgetter:

import operator 
sortedList = sort(data, key=operator.itemgetter(1)) 
+0

Вам не нужно буферизировать строки в список с помощью 'readlines()'; 'f' уже является итерируемым. –

+0

@WillVousden, true :) – Netwave

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