Если у вас есть ES6 совместимый браузер, вы можете использовать:
Разница между порядком сортировки по возрастанию и убыванию является признаком значение, возвращаемое вашей функцией сравнения:
var ascending = homes.sort((a, b) => Number(a.price) - Number(b.price));
var descending = homes.sort((a, b) => Number(b.price) - Number(a.price));
Вот фрагмент рабочего кода:
var homes = [{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}];
homes.sort((a, b) => Number(a.price) - Number(b.price));
console.log("ascending", homes);
homes.sort((a, b) => Number(b.price) - Number(a.price));
console.log("descending", homes);
Можно ли анализировать файл по строкам и редактировать строку на месте при прохождении строк?
blockquote>Его можно моделировать, используя резервный файл как stdlib
fileinput
module .Вот пример скрипта, который удаляет строки, которые не удовлетворяют
some_condition
из файлов, указанных в командной строке, илиstdin
:#!/usr/bin/env python # grep_some_condition.py import fileinput for line in fileinput.input(inplace=True, backup='.bak'): if some_condition(line): print line, # this goes to the current file
Пример:
$ python grep_some_condition.py first_file.txt second_file.txt
В файлах завершения
first_file.txt
иsecond_file.txt
будут содержаться только строки, которые удовлетворяют предикатуsome_condition()
.
fileinput module имеет очень уродливый API, я нахожу красивый модуль для этой задачи - in_place , пример для Python 3:
import in_place
with in_place.InPlace('data.txt') as file:
for line in file:
line = line.replace('test', 'testZ')
file.write(line)
Основное отличие от fileinput:
Нет. Вы не можете безопасно писать в файл, который вы также читаете, так как любые изменения, внесенные вами в файл, могут перезаписывать контент, который вы еще не читали. Чтобы сделать это безопасно, вам нужно будет прочитать файл в буфер, обновить любые строки по мере необходимости, а затем переписать файл.
Если вы заменяете байты на байты, содержимое в файл (т. е. если текст, который вы заменяете, имеет ту же длину, что и новая строка, которую вы заменяете), тогда вы можете уйти с ним, но это гнездо шершней, поэтому я бы сэкономил вам хлопот и просто прочитал полный файл, замените содержимое в памяти (или через временный файл) и запишите его снова.
Вы должны выполнить резервное копирование по размеру строки в символах. Предполагая, что вы использовали readline
, вы можете получить длину строки и выполнить резервное копирование, используя:
file.seek(offset[, whence])
Установите значение в SEEK_CUR
, установите смещение на -length
.
См. Документы Python или посмотрите man-страницу для seek
.
Если вы только намерены выполнять локализованные изменения, которые не изменяют длину части файла, который был изменен (например, изменение всех символов на нижний регистр), вы можете реально перезаписать старое содержимое файла динамически.
Для этого вы можете использовать произвольный доступ к файлам с помощью метода seek()
объекта file
.
В качестве альтернативы вы можете используйте объект mmap
для обработки всего файла в качестве изменяемой строки. Имейте в виду, что объекты mmap
могут устанавливать максимальный размер файла в диапазоне 2-4 ГБ на 32-битном ЦП, в зависимости от вашей операционной системы и ее конфигурации.
files
, docs.python.org/3/library/fileinput.html – serv-inc 25 July 2018 в 06:51