Как записать файл в обратном порядке

Обновлено: 03.07.2024

Как читать файл в обратном порядке с помощью python? Я хочу прочитать файл от последней строки до первой строки.

правильный, эффективный ответ, написанный как генератор.

Как насчет чего-то вроде этого:

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

вы также можете использовать модуль Python file_read_backwards .

после его установки, через pip install file_read_backwards (v1.2.1), Вы можете прочитать весь файл назад (по линии) в памяти эффективным способом через:

он поддерживает кодировки"utf-8"," latin-1 "и" ascii".

Если вы находитесь в linux, вы можете использовать .

2 рецепты вы можете найти в ActiveState здесь и здесь

здесь вы можете найти мою реализацию my, вы можете ограничить использование ОЗУ, изменив переменную "буфер", есть ошибка, что программа печатает пустую строку в начале.

а также использование ОЗУ может быть увеличено, если нет новых строк более чем для байтов буфера, переменная " утечка "будет увеличиваться до появления новой строки ("\n").

Это также работает для 16 ГБ файлов, которые больше, чем моя общая память.

Спасибо за ответ @srohde. Он имеет небольшую ошибку, проверяющую символ новой строки с оператором "is", и я не мог прокомментировать ответ с репутацией 1. Также я хотел бы управлять открытым файлом снаружи, потому что это позволяет мне вставлять мои бессвязные задачи для Луиджи.

что мне нужно изменить в виде:

Я хотел бы изменить на:

вот измененный ответ, который хочет дескриптор файла и сохраняет новые строки:

простая функция для создания второго перевернутого файла (только linux):

Если вас беспокоит размер файла / использование памяти, сопоставление памяти с файлом и сканирование назад для новых строк-это решение:

всегда использовать with при работе с файлами, так как он обрабатывает все для вас:

вам нужно будет сначала открыть файл в формате чтения, сохранить его в переменную, а затем открыть второй файл в формате записи, где вы напишете или добавите переменную, используя срез [::-1], полностью перевернув файл. Вы также можете использовать readlines (), чтобы сделать его в список строк, которыми вы можете управлять

Я только видел ответ Мурата Юкселена во время написания этого ответа. Это почти то же самое, что, я думаю, хорошо. В приведенном ниже примере также рассматривается \r и увеличивается его размер буфера на каждом шаге. У меня также есть некоторые тесты этого кода.

Я должен был сделать это некоторое время назад и использовал ниже код. Она тянется к раковине. Боюсь, у меня больше нет полного сценария. Если вы находитесь в операционной системе unixish, вы можете использовать "tac", однако, например, команда Mac OSX TAC не работает, используйте tail-r. Приведенный ниже фрагмент кода проверяет, на какой платформе вы находитесь, и соответствующим образом настраивает команду

Текстовые файлы. Примеры решения задач на модификацию текстовых файлов

В данной теме приведены примеры решения задач, которые могут возникнуть при обработке текстовых файлов. Предложенный в данной теме подход оперирования данными в файлах может быть использован для решения широкого круга родственных задач.

Содержание

  • 1. Как определить, что данные в текстовом файле закончились?
  • 2. Как прочитать строки из текстового файла, если их количество неизвестно? Способы определения количества строк в файле
  • 3. Замена строки в текстовом файле. Пример
  • 4. Удаление строки из файла по ее индексу. Пример
  • 5. Вставка строки в указанную позицию файла. Пример
  • 6. Обмен местами двух строк в файле. Пример
  • 7. Реверсирование строк файла (перестановка строк файла в обратном порядке). Пример
  • 8. Сортировка строк файла. Метод сортировки выбором. Пример
  • 9. Объединение двух файлов. Пример

Поиск на других ресурсах:

1. Как определить, что данные в текстовом файле закончились?

Пример.

2. Как прочитать строки из текстового файла, если их количество неизвестно? Способы определения количества строк в файле

Для чтения всех строк файла можно выделить два основных способа:

  • прочитать строки файла методом readlines() . Результатом будет список. Затем с помощью метода len() определить количество строк;
  • реализовать цикл чтения строк методом readline() до тех пор, пока не будет пустая строка. Метод readline() возвращает пустую строку в случае, когда достигнут конец файла.

Пример. В примере приводятся 3 способа определения количества строк в файле.

3. Замена строки в текстовом файле. Пример

Чтобы заменить строку в текстовом файле нужно выполнить следующие действия:

  • считать файл в список;
  • изменить строку в списке;
  • записать список в файл.
4. Удаление строки из файла по ее индексу. Пример

По примеру п. 3 выполняется удаление строки по ее индексу.

5. Вставка строки в указанную позицию файла. Пример

В данном примере осуществляется вставка строки в указанную позицию файла. Если указать позицию, которая размещена за последней строкой файла, то осуществляется дописывание строки в конец файла.

6. Обмен местами двух строк в файле. Пример
7. Реверсирование строк файла (перестановка строк файла в обратном порядке). Пример
8. Сортировка строк файла. Метод сортировки выбором. Пример

Приводится пример сортировки строк файла. Используется метод сортировки выбором.

Есть ли в любом случае сделать это, не копируя содержимое и создавая новый файл без того, что я прочитал?

Решение

Если вы просто хотите взять двоичные данные и представить их в обратном порядке, независимо от их значения, ваш код в порядке.

Затем вы должны открыть поток в binary для согласованности по всей платформе (т. е. избегайте преобразования новой строки в двойной перевод новой строки на платформах, таких как окна, которые ее кодируют как 0x0d,0x0a ).

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

Вот отлаженный код:

Ваш код, однако, не может правильно читать UTF8 закодированные файлы, потому что многобайтовые последовательности будут механически почитаться, а их возвращенная версия недействительна UTF8:

  • Это не проблема, если в вашем файле есть только символы ASCII.
  • Если для вас проблема согласованности UTF8, вы можете рассмотреть очень простую обходной путь: если вы читаете персонаж u для которого (u & 0xC0) == 0x80 Вы должны прочитать все предыдущие символы, пока это условие не станет ложным, и вывести группу байтов (между 2 и 8) в правильном порядке.

Вот как это сделать:

Последний пункт: удаление последнего байта из входного потока зависит от операционной системы. Вы должны взглянуть на этот ТАК вопрос чтобы получить ответы о том, как это сделать в Linux / Posix и Windows.

Другие решения

Это действительно невозможно без использования одного из методов, изложенных Вот или же Вот . Если вы посмотрите на istream_iterator, вы увидите, что это входной итератор (24.6.1) (1)

Шаблон класса istream_iterator является входным итератором

Тогда из (24.2.1) (таблица 105)

Как вы можете видеть, входной итератор является более ограничительным прямым итератором, и прямой итератор может идти только в одном направлении. Из-за этого поведения они не являются стандартным способом начать в конце входного потока и идти назад

перевернуть строку в C

Программирование и разработка

В строковом кодировании реверсирование строк является важной темой. Существует также несколько методов переворота строки, каждый из которых имеет свою логику. Эта статья покажет вам, как правильно перевернуть строку, чтобы использовать несколько различных подходов и рассуждений с и без использования каких-либо предустановленных функций. Всякий раз, когда обращение строковой техники применяется к конкретной уникальной входной строке, текст, который потребитель предоставит в определенном порядке, будет полностью перевернут. В приведенном ниже примере использовались различные альтернативы переворачивания струны с помощью C.

При реализации этого руководства мы работали над системой Ubuntu 20.04 Linux, настроенной на Virtual Box. Во время работы в системе Linux мы обычно выполняли большинство установок и запросов в оболочке терминала. Следовательно, откройте оболочку терминала с помощью сочетания клавиш «Ctrl + Alt + T» или выполните поиск в строке поиска приложения в области «Активность» рабочего стола Ubuntu. Сначала необходимо обновить вашу систему с помощью подходящего запроса на обновление. Он запросит у вас текущий пароль пользователя для запуска обновления. Следовательно, добавьте пароль и нажмите кнопку Enter.

Поскольку мы использовали язык программирования C для разработки концепции реверсирования строк в системе Ubuntu 20.04, в их системе Ubuntu должен быть установлен компилятор C. Поэтому обязательно установите компилятор GCC в вашей системе с помощью следующего запроса.

Пример 01: Использование цикла For

После установки и настройки компилятора GCC и обновления пакета «apt» он создает новый файл. Этот файл должен быть типа C; поэтому используйте сенсорную команду для создания файла «new.c», как показано ниже. Этот файл будет использоваться в нашем коде с этого момента при реализации программ с обратными строками.

Теперь вы можете открыть этот файл для редактирования или кодирования с помощью редактора Nano, встроенного в вашу систему Ubuntu 20.04 Linux. Поэтому попробуйте сделать это в своей оболочке с помощью приведенной ниже инструкции.

Читайте также: