Простой анализ и сортировка данных из файла - PullRequest
0 голосов
/ 09 ноября 2018

Извините, если на этот вопрос уже был дан ответ; проведенные мной поиски не помогли.

У меня есть файл, в котором хранятся данные как таковые:

имя, номер

(Хотя, возможно, это не относится к вопросу, мне придется добавить записи в этот файл. Я знаю, как это сделать.)

Мой вопрос касается питонического (?) Способа анализа данных и сортировки их в порядке возрастания. Так что, если файл был:

Алекс, 30

боб, 20

и мне нужно добавить запись

Кэрол, 25

Файл должен быть переписан как

боб, 20

колядка, 25

Алекс, 30

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

Я не могу использовать библиотеки для этой программы.

Edit:

Моя первая попытка, которую я не проверял, потому что все, что ему удалось сделать, это отсортировать список результатов; Я не знаю, как вернуть «записи».

file = open("scores.txt" , "r")
data = file.read()
list_data = data.split()
data.append([name,score])
for i in range(len(list_data)):
    list_scores = list_scores.append(list_data[i][1])
list_scores = sorted(list_scores)

Как видите, это дает мне возрастающий список результатов, но я не знаю, куда идти, чтобы отсортировать список имен и записей результатов.

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

это функция, которая берет имя файла и сортирует его для вас

def sort_file(filename):
    f = open(filename, 'r')
    text = f.read()
    f.close()
    lines = [i.split(',') for i in text.splitlines()]
    lines.sort(key=lambda x: x[1])
    lines = [', '.join(i) for i in lines]
    text = '\n'.join(lines)
    f = open(filename, 'w')
    f.write(text)
    f.close()
0 голосов
/ 09 ноября 2018

Я предполагаю, что вы можете поместить свои данные в файл .csv в следующем формате:

Name,Number
John,20
Jane,25

Затем вы можете использовать csv.DictReader , чтобы прочитать это в словарь с чем-то вроде, как показано в приведенном примере:

with(open('name_age.csv', 'w') as csvfile:
    reader = csv.DictReader(csvfile)

и запишите в него, используя

with(open('name_age.csv') as csvfile:
    writer = csv.DictWriter(csvfile)
    writer.writerow({'Name':'Carol','Number':25})

Затем вы можете отсортировать его, используя встроенный в Python operator, как показано здесь

0 голосов
/ 09 ноября 2018

Вам просто нужно записать отсортированные записи обратно в некоторый файл, используя базовое форматирование строки:

with open('scores.txt') as f_in, open('file_out.txt', 'w') as f_out:
    entries = [(x, int(y)) for x, y in (line.strip().split(',') for line in f_in)]
    entries.append(('carol', 25))
    entries.sort(key=lambda e: e[1])
    for x, y in entries:
        f_out.write('{},{}\n'.format(x, y))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...