Ошибка при записи в файл

 
0
 
Python
ava
rootkid | 06.03.2010, 22:50
Здравствуйте.
Есть задача:
Написать скрипт для формирования файла а-ля файл хостс:


#! usr/bin/env Python26
#-*-coding: UTF-8-*-
import os

try:
fileHosts=open(os.environ['USERPROFILE']+r"\hosts",'r+')
fileHosts.seek(0) # указатель в начало файла во избежании глюков
tempList=[]
for line in fileHosts.readlines():
tempTuple=tuple(line.split()) # делим прочитанную из файла строку по пробелу, получаем список из 2х строк, кот. далее конвертируем в кортеж
tempList.append(tempTuple) # добавляем новый элемент (кортеж) в список
dictHosts=dict(tempList) # создаём словарь из списка кортежей
fileHosts.close()
print '-|%s|%s|%s|-' % ('IP','-'*30, 'Hostname'), '\n', '-'*45
for key, value in dictHosts.items():
print '%s %30s' % (key, value)
except IOError:
fileHosts=open(os.environ['USERPROFILE']+r"\hosts",'w')
fileHosts.close()

fileHosts=open(os.environ['USERPROFILE']+r"\hosts",'r+')
fileHosts.seek(0)
entry=raw_input('Please, enter new \'ip_addr hostname\' pair: ')
#entry+='\n'
if fileHosts.read(1)!='':
entry='\n'+entry
fileHosts.writelines(entry)
fileHosts.close()

При первом запуске (при отсутствии файла) , мы заходим в блок exception и создаём файл. В консоль выводится приглашение ко вводу: вводим айпишник и хостнейм, разделённые пробелом (да хоть любые 2 строки, главное, чтобы 2, и чтобы пробелом:)))). Задача проверки ввода на корректность пока не стоит.
Первый раз всё чудесно, выполнение скрипта успешно завершается.
Далее запускаем его снова (файл уже есть, и в нём строка), соотв. заходим в try, он нам выводит содержимое словаря и далее опять ввод. И вот после этого второго ввода запись в файл генерирует исключение, непонятного вида:)

-|IP|------------------------------|Hostname|-
---------------------------------------------
5.5.5.5 asdfsadf
Please, enter new 'ip_addr hostname' pair: abcdrdfg asdfasdfsadf
Traceback (most recent call last):
File "C:\Users\Alexandr\workspace\acad_dev\src\file.py", line 27, in <module>
fileHosts.writelines(entry)
IOError: [Errno 0] Error

Объясните мне, пожалуйста, где я не прав?
заранее прошу прощения за ?:%-код. Питон начал изучать пару дней назад:)
Kommentare (2)
ava
VaderZ | 26.03.2010, 01:46 #
Ошибку вы получаете из-за того, что указатель находится не в начале строки, поэтому сделать writelines проблематично.
А вобще, вы, по-моему, перемудрили, проще было бы сдеалть вот так:

import os

try:
fileHosts=open(os.environ['USERPROFILE']+r"\hosts",'r+')
except IOError:
fileHosts=open(os.environ['USERPROFILE']+r"\hosts",'w+')

print '-|%s|%s|%s|-' % ('IP','-'*30, 'Hostname'), '\n', '-'*45
for line in fileHosts:
print '%s %30s' % (line.split()[0], line.split()[1])

entry=raw_input('Please, enter new \'ip_addr hostname\' pair: ')
fileHosts.writelines(entry+'\n')
fileHosts.close()
ava
rootkid | 26.03.2010, 14:38 #
Спасибо, за 20 дней я уже разобрался))))) А нужно было только ман почитать)
А вот за более лаконичный вариант - действительно, Спасибо!)
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  VaderZ   rootkid
advanced
Absenden