Python возврат в начало файла

Чтение файлов#

Посмотрим как считывать содержимое файлов, на примере файла r1.txt:

! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !

read #

Метод read — считывает весь файл в одну строку.

Пример использования метода read :

In [1]: f = open('r1.txt') In [2]: f.read() Out[2]: '!\nservice timestamps debug datetime msec localtime show-timezone year\nservice timestamps log datetime msec localtime show-timezone year\nservice password-encryption\nservice sequence-numbers\n!\nno ip domain lookup\n!\nip ssh version 2\n!\n' In [3]: f.read() Out[3]: '' 

При повторном чтении файла в 3 строке, отображается пустая строка. Так происходит из-за того, что при вызове метода read , считывается весь файл. И после того, как файл был считан, курсор остается в конце файла. Управлять положением курсора можно с помощью метода seek .

readline #

Построчно файл можно считать с помощью метода readline :

In [4]: f = open('r1.txt') In [5]: f.readline() Out[5]: '!\n' In [6]: f.readline() Out[6]: 'service timestamps debug datetime msec localtime show-timezone year\n' 

Но чаще всего проще пройтись по объекту file в цикле, не используя методы read. :

In [7]: f = open('r1.txt') In [8]: for line in f: . print(line) . ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !

readlines #

Еще один полезный метод — readlines . Он считывает строки файла в список:

In [9]: f = open('r1.txt') In [10]: f.readlines() Out[10]: ['!\n', 'service timestamps debug datetime msec localtime show-timezone year\n', 'service timestamps log datetime msec localtime show-timezone year\n', 'service password-encryption\n', 'service sequence-numbers\n', '!\n', 'no ip domain lookup\n', '!\n', 'ip ssh version 2\n', '!\n'] 

Если нужно получить строки файла, но без перевода строки в конце, можно воспользоваться методом split и как разделитель, указать символ \n :

In [11]: f = open('r1.txt') In [12]: f.read().split('\n') Out[12]: ['!', 'service timestamps debug datetime msec localtime show-timezone year', 'service timestamps log datetime msec localtime show-timezone year', 'service password-encryption', 'service sequence-numbers', '!', 'no ip domain lookup', '!', 'ip ssh version 2', '!', ''] 

Обратите внимание, что последний элемент списка — пустая строка.

Если перед выполнением split , воспользоваться методом rstrip , список будет без пустой строки в конце:

In [13]: f = open('r1.txt') In [14]: f.read().rstrip().split('\n') Out[14]: ['!', 'service timestamps debug datetime msec localtime show-timezone year', 'service timestamps log datetime msec localtime show-timezone year', 'service password-encryption', 'service sequence-numbers', '!', 'no ip domain lookup', '!', 'ip ssh version 2', '!'] 

seek #

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

Читайте также:  What is java computer course

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

Пример открытия файла и считывания содержимого:

In [15]: f = open('r1.txt') In [16]: print(f.read()) ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !

Если вызывать ещё раз метод read , возвращается пустая строка:

Но с помощью метода seek можно перейти в начало файла (0 означает начало файла):

После того как с помощью seek курсор был переведен в начало файла, можно опять считывать содержимое:

In [19]: print(f.read()) ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !

Источник

Переместить курсор в начало файла

В файле уже есть некоторые данные, также есть абсолютно пустая строка в самом верху (начале) файла. Нужно переместить
курсор на эту самую строку. Но когда запускаю код данные продолжают писаться в конец хоть и «a+», и chats.seek(0).

Не могли бы подсказать в чём проблема?

Как переместить курсор в начало поля LineEdit при использовании маски
Прошу помощи. Использую маску в поле LineEdit. При установке мышкой курсора в это поле, он.

Как переместить курсор в начало или конец поля?
выложите пример используя эти файлы пожалуйста.

Как переместить курсор в файле в читаемом файле на начало?
Добрый день. Выполнил цикл "while not eof(inputFile)". Теперь надо выполнить еще раз цикл с таким.

Поставить курсор файла в начало
Я читаю весь файл и перемещаю курсор в его начало. После пытаюсь прочитать его снова, но вместо.

Читайте также:  Python datetime delta years

Добавлено через 8 минут
Хотя нет, не используй, он ж поверх пишет. В общем тогда не знаю, ждем гуру)

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

Вписать вместо пустой первой строки какой-то текст и в правду врядли получится, если только она не состояла из соответствующего количества пробелов. Незатейливое решение:

with open('file.txt') as f: contents = f.readlines() contents[0] = 'some new text\n' with open('file.txt', 'w') as f: for s in contents: f.write(s);

http://stackoverflow.com/quest. -in-python ну, а если в 2 словах, то нельзя сделать то, что ты хочешь.

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

use DB_File; tie(@lines, "DB_File", "file.txt", O_RDWR|O_CREAT, 0666, $DB_RECNO) or die "Can't open file"; $lines[0] = "some new text"; untie @lines;

Переместить указатель потока ввода на начало файла
Вот я воспользовался функцией feof по отношению к файлу и у меня указатель сместился на конец.

Переместить курсор
Как перенести курсор (или выделение) к слову, найденному с помощью Find?

Переместить курсор
Добрый день! Ребята подскажите как переместить курсор на 1 символ вперёд в Edit Заранее.

Переместить курсор мыши
Подскажите как можно переместить курсор мышки в Windows Forms С++\CLI Подключаю <windows.h> Пишу.

Переместить курсор туда-то
В WinXp если нажать в пуске Завершение Работы, появляется выбиралка действия — ждущий.

Источник

unixforum.org

Не получается, записывает вместо всего содержимого эту одну строку. (вроде права стоят r+ или он все равно удаляет все что есть после добавленной строки?)
Можно ли как то это сделать или придется делать промежуточный файл туда все скидывать из исходного файла, изменять исходный файл и дописывать в конец из промежуточного?

Re: [Решено]Python запись в начало файла.

Сообщение Alex2ndr » 05.01.2010 23:31

Хе хе — только что на pythonua@conference.jabber.ru спрашивал как такое сделать
Итог таков — считать построчно в список строк(например через readlines), затем в данный список добавить нужные строки и потом записать этот список в файл.
Недостатки — весь файл окажется в памяти — если файл большой то она может закончиться

Re: [Решено]Python запись в начало файла.

Сообщение Crazy » 05.01.2010 23:44

Хе хе — только что на pythonua@conference.jabber.ru спрашивал как такое сделать
Итог таков — считать построчно в список строк(например через readlines), затем в данный список добавить нужные строки и потом записать этот список в файл.
Недостатки — весь файл окажется в памяти — если файл большой то она может закончиться

открываешь новый файл, записываешь те самые строчки, копируешь все остальное, закрываешь файл, переименовываешь файл.

Читайте также:  Битрикс актуальная версия php

Re: [Решено]Python запись в начало файла.

Сообщение Alex2ndr » 06.01.2010 00:24

открываешь новый файл, записываешь те самые строчки, копируешь все остальное, закрываешь файл, переименовываешь файл.

Я рассматривал более общий случай — как записать не только в начало, но и в середину файла. Если файл небольшой, то предложенный мной способ проще и удобнее чем работа с файлами. А вот если файл здоровый, то Ваш способ будет лучше — особенно если реализовать чтение через генераторы и иные ленивые способы.

NickLion Сообщения: 3408 Статус: аватар-невидимка ОС: openSUSE Tumbleweed x86_64

Re: [Решено]Python запись в начало файла.

Сообщение NickLion » 06.01.2010 00:53

Вариант номер 3.
0. Завести два буфера, каждый в размер вставляемого текста. В буфер 1 поместить вставляемый текст.
1. Сместиться к месту, где надо вставить строчки.
2. Считать в буфер 2 текст. Сместиться назад.
3. Записать содержимое буфера 1. Поменять буфера (или номера )
4. Пока не кончился файл, повторить с п.2.
5. Записать содержимое буфера 1 (оставшийся хвост, ага).
6. Пожалеть файл и не использовать этот метод.

Re: [Решено]Python запись в начало файла.

Сообщение Crazy » 06.01.2010 14:21

открываешь новый файл, записываешь те самые строчки, копируешь все остальное, закрываешь файл, переименовываешь файл.

Я рассматривал более общий случай — как записать не только в начало, но и в середину файла. Если файл небольшой, то предложенный мной способ проще и удобнее чем работа с файлами. А вот если файл здоровый, то Ваш способ будет лучше — особенно если реализовать чтение через генераторы и иные ленивые способы.

Чем проще и удобней?
Копирование файла состоит из 3х операторов: оператор цикла, оператор чтения, оператор записи.
В общем случае размер файла неизвестен. Алгоритм выглядит так:
Копирование элементов до места вставки;
Вставка новых элементов;
Копирование оставшихся элементов.

За списками лежит динамическое управление памятью, все вызовы выделения/освобождения проходят через ОС.
В самой ОС организована память странично или сегментно-странично.
В общем случае операция вставки в список занимает N/2 операций.
И смысл экономить пару строк кода, когда такое неэффективное использование ресурсов?

watashiwa_daredeska Бывший модератор Сообщения: 4038 Статус: Искусственный интеллект (pre-alpha) ОС: Debian GNU/Linux

Re: [Решено]Python запись в начало файла.

За списками лежит динамическое управление памятью, все вызовы выделения/освобождения проходят через ОС.

Не получается, записывает вместо всего содержимого эту одну строку. (вроде права стоят r+ или он все равно удаляет все что есть после добавленной строки?)

It works for me. Но могу посоветовать делать file.close().

Источник

Оцените статью