Как пройти файл в Python и C ++ в обратном направлении? А также хранить данные в обратном порядке (снизу вверх)? - PullRequest
0 голосов
/ 04 мая 2010

Предположим, я хочу сохранить 3 строки в файле как на Python, так и на C ++. Я хочу хранить это так

aaa
bbb 
ccc ..

Но я сначала даю ccc, затем bbb, затем aaa. Как мне пройти файл снизу вверх, а также сохранить снизу вверх /?

Ответы [ 3 ]

3 голосов
/ 04 мая 2010

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

Чтение

Если все в порядке, чтобы загрузить все это в память сразу (в Python):

list(reversed(list(open('foo.txt'))))

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

Пишущий

Если все данные помещаются в памяти одновременно, поместите числа в список (на Python):

open('foo.txt', 'w').writelines(reversed(data))

Если data является итеративным, замените его на list(data).

Если данные не помещаются в память (например, у вас есть какой-то генератор, который выплевывает тонну данных), проблема будет намного сложнее. Самое простое решение, которое приходит на ум, - просто поместить данные в базу данных sqlite, а затем скопировать их в файл. Или вам может быть проще использовать данные непосредственно из sqlite.

1 голос
/ 04 мая 2010

Возможно, вы захотите использовать collections.deque.На самом деле эти вещи оптимизированы для вставки в одну из их конечных точек, так что вы можете прочитать свой файл как есть и заполнить строки в deque объекте с помощью метода appendleft ... просто мысль.Не знаю, насколько это будет эффективно.:)

0 голосов
/ 04 мая 2010

Вставьте строки, которые будут сгенерированы в начале вашей линейной структуры (list, vector<string>) каждый раз, затем выполните итерацию вашей структуры от начала до конца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...