искать (), затем читать (), затем писать () в Python - PullRequest
7 голосов
/ 24 апреля 2009

При запуске следующего кода Python:

>>> f = open(r"myfile.txt", "a+")        
>>> f.seek(-1,2)                                        
>>> f.read()                                            
'a'                                                     
>>> f.write('\n')                                        

Я получаю следующее (полезное) исключение:

Traceback (most recent call last):      
  File "<stdin>", line 1, in <module>   
IOError: [Errno 0] Error        

То же самое происходит при открытии с "r +".

Это должно провалиться? Зачем?

Edit:

  1. Очевидно, это всего лишь пример, а не то, что я на самом деле пытаюсь выполнить. Моя настоящая цель состояла в том, чтобы проверить, что файлы заканчиваются на «\ n», или добавить один, прежде чем добавлять новые строки.
  2. Я работаю под Windows XP, и они существуют как в Python 2.5, так и в Python 2.6.
  3. Мне удалось обойти проблему, снова вызвав seek ():

    f = open (r "myfile.txt", "a +")
    f.seek (-1,2)
    f.read ()
    'А'
    f.seek (-10,2)
    f.write ('\ n')

Фактические параметры второго поискового вызова, кажется, не имеют значения.

Ответы [ 3 ]

5 голосов
/ 24 апреля 2009

Похоже, что это проблема для Windows - аналогичную проблему см. http://bugs.python.org/issue1521491.

Еще лучше, обходной путь дан и объяснен на http://mail.python.org/pipermail/python-bugs-list/2005-August/029886.html, вставка:

f.seek(f.tell())

между вызовами read () и write ().

1 голос
/ 24 апреля 2009

режим a + предназначен для добавления, если вы хотите читать и писать, вы ищете r +.

попробуйте это:

>>> f = open("myfile.txt", "r+")
>>> f.write('\n')

Edit:

Вы должны были указать свою платформу изначально ... есть известные проблемы с поиском в Windows. При попытке поиска UNIX и Win32 имеют разные окончания строк, LF и CRLF соответственно. Существует также проблема с чтением до конца файла. Я думаю, что вы ищете смещение seek (2) для конца файла, а затем продолжите.

эти статьи могут быть вам интересны (вторая более конкретно):

http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-08/2512.html

http://mail.python.org/pipermail/python-list/2002-June/150556.html

0 голосов
/ 24 апреля 2009

у меня работает:

$ echo hello > myfile.txt
$ python
Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('myfile.txt', 'r+')
>>> f.seek(-1, 2)
>>> f.tell()
5L
>>> f.read()
'\n'
>>> f.write('\n')
>>> f.close()

Вы на окнах? Если это так, попробуйте 'rb+' вместо 'r+' в режиме.

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