2015-05-13 3 views
-1

я создал код, который присоединяет список из 6 случайных чисел в текстовый файл с некоторыми правилами, как 3 ладах & 3 даже, 2 шансы & 3 даже и т.д.Списки сортировки внутри текстового файла в Python

Есть любой способ сортировки списков внутри текстового файла? Например:

Если у меня есть текстовый файл, как это:

[2, 3, 4] 
[2, 4, 5] 
[3, 1, 2] 
[1, 3, 4] 
[1, 2, 3] 

и я хочу, чтобы организовать/разбирайтесь, как это:

[1, 2, 3] 
[1, 3, 4] 
[2, 3, 4] 
[2, 4, 5] 
[3, 1, 2] 

Мое решение до сих пор (Но я не» знают, как применить его):

  1. Просто добавьте его как 1 2 3 в отличие от [1, 2, 3] так, чтобы я мог легко использовать его в моем коде с помощью .split()

  2. перебрать все 1 NUM и сортировки

    Если первый Num равен другому 1 NUM:

    Проверьте, кто имеет более низкий 2-й пит и движение он на вершине

    Если второй Num равен:

    Проверить, кто имеет более низкий 3-й пит и переместить его на вершине

    И так далее.

+0

Но при сортировке списка в памяти объектов python. Это то же самое, что и список сортировки, но вам нужно сначала прочитать файл. – cosmoscalibur

+1

Вам не нужно сравнивать первое, второе и третье места по отдельности. Просто прочитайте строки как списки/кортежи и отсортируйте их. –

ответ

3

Просто отсортируйся как список. Вам не нужно беспокоиться об итерациях.

with open('test.txt', 'r') as text: 
    nums = [ast.literal_eval(i) for i in text] 
    data = [str(i) + '\n' for i in sorted(nums)] 

with open('test.txt', 'w') as text: 
    text.writelines(data) 
+0

Как насчет '[2, 0, 0] \ n [11, 0, 0]'? –

+0

@tobias_k Как насчет сейчас? –

+0

@MalikBrahimi Спасибо! Первое решение отлично работало для меня! –

0

Читает список из файла с именем original.txt и записывает отсортированный результат в файл с именем sorted.txt:

with open('original.txt') as f, open('sorted.txt', 'w') as g: 
    unsorted_lists = map(eval, f.read().splitlines()) 
    sorted_lists = sorted(unsorted_lists) 
    g.write('\n'.join(map(str, sorted_lists))) 
+1

'eval' - отличная идея. –

0

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

out = open("out","w") 
for i in sorted(open("in").readlines()): 
    if i[-1] != "\n": 
    i+="\n" 
    out.write(i) 
out.close() 
0

Списки в Python сопоставимы с упорядочением, как вы описали:

>>> [1,2,3] < [1,2,4] 
True 
>>> [1,2,3] >= [1,3,3] 
False 

Если вы сначала создаете текстовый файл на Python, вы можете отсортировать список списков перед записью файла. Или вы можете прочитать файл и проанализировать каждую строку, а затем отсортировать его. Если вы не доверяете содержимому файла, вы можете анализировать каждую строку как JSON, используя json module.

Это более надежное средство, чем сортировка с использованием сравнения строк, поскольку сравнение строк будет прерываться для чисел с различным количеством цифр.