Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при записи в файл 
:(
    Опции темы
rootkid
  Дата 6.3.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.3.2010
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Здравствуйте.
Есть задача:
Написать скрипт для формирования файла а-ля файл хостс:

Код

#! 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

Объясните мне, пожалуйста, где я не прав?
заранее прошу прощения за ?:%-код. Питон начал изучать пару дней назад:)
PM MAIL ICQ Skype   Вверх
VaderZ
Дата 26.3.2010, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 4.2.2010

Репутация: нет
Всего: нет



 Ошибку вы получаете из-за того, что указатель находится не в начале строки, поэтому сделать 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()

PM MAIL WWW   Вверх
rootkid
Дата 26.3.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.3.2010
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Спасибо, за 20 дней я уже разобрался))))) А нужно было только ман почитать)
А вот за более лаконичный вариант - действительно, Спасибо!)
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.