1

Я хочу отсортировать некоторые элементы в алфавитном порядке, но очень четко.

У меня есть, например, следующий список, каждый элемент которого разделен запятой:

monkeys, big dogs, cats
pineapple, banana, orange
yellow, red, blue, green
silver, gold, platinum
delphi, java, c++, visual basic

Элемент здесь определяется фрагментом текста:1. начинающийся в начале строки и заканчивающийся непосредственно перед первой запятой; 2. окруженные запятыми и 3. начинающиеся сразу после последней запятой и заканчивающиеся концом строки. Таким образом, пробелы не являются разделителями, так как у "больших собак" образуется единое целое.

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

Мой желаемый результат будет:

big dogs, cats, monkeys
banana, orange, pineapple
blue, green, red, yellow
gold, platinum, silver
c++, delphi, java, visual basic

В моем списке целей более 3000 строк, поэтому это должен быть автоматизированный процесс.

Спасибо!

2 ответа2

1

Powershell один вкладыш:

$sep=","; gc infile.txt |% {$line=($_ -split $sep)|% {$_.trim()}|sort;$line -join $sep} >outfile.txt

Заметки:
1. Использует синтаксис join PS 2, который является более компактным.
2. , в качестве разделителя (как показано) , будут удалены все ведущие / конечные пробелы из слов. Это то, что я предполагаю из контекста, который вы хотите, но если я взял ваше описание буквально, они должны быть сохранены. Если вы хотите, удалите |% {$_.trim()} (но тогда sort не будет работать «как положено» для вашего примера с начальными пробелами)
3. Вы можете использовать ,<space> (или что-нибудь еще, в этом отношении) в качестве разделителя вывода (-join ", ") это нормализует любой смешанный ввод (с пробелами после запятой или без них) к выбранному вами.
4. Кодировка по умолчанию для вывода в PS - Unicode (UTF-16). Вы можете изменить его, используя | out-file -Encoding <encoding_type> вместо перенаправления > если вам нужно это контролировать. Чтобы увидеть доступные кодировки, запустите help out-file -full

1

Вот тот, который должен сделать это в Python.

import csv

f = open("sortrows.csv", 'rb')
reader = csv.reader(f)

outf = open("sortedrows.csv", 'w')
for row in reader:
    row.sort()
    outf.write(",".join(row) + "\n")

f.close()
outf.close()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .