Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 5, 2016 23:33:30

XFaost
Зарегистрирован: 2016-06-05
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка ip

Python 2.7
мне нужно записать в блокнот ip пк, который запустил программу. затем, чтобы программа проверяла настоящее ip между ip, который в блокноте.
у меня получилось так:

# encoding: utf-8
import socket
ip = socket.gethostbyname_ex(socket.gethostname())[2]
save = open("save.txt","w")
s = save.read()
if str(s) == 0:
	save.write(str(ip))
sm = save.read()
if str(sm) == str(ip):
	print u"Совпало"
else:
	print u"не совпало"
save.close()
	

Отредактировано XFaost (Июнь 6, 2016 12:58:35)

Прикреплённый файлы:
attachment save.txt (1 байт)

Офлайн

#2 Июнь 6, 2016 10:56:13

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Проверка ip

и?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июнь 6, 2016 11:06:12

XFaost
Зарегистрирован: 2016-06-05
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка ip

у меня так не получается: ошибка. исправьте, если можете

Отредактировано XFaost (Июнь 6, 2016 11:08:40)

Офлайн

#4 Июнь 6, 2016 11:37:54

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Проверка ip

1. Оформите код как положено используя для этого соответствующий тег!
2. Покажите какую ошибку вам пишет



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Июнь 6, 2016 12:50:42

XFaost
Зарегистрирован: 2016-06-05
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка ip

Traceback (most recent call last):
File “vtest.py”, line 5, in <module>
s = save.read()
IOError: File not open for reading

Python 2.7!
я понимаю, что программа не может прочитать файл, если задан режим “w”. Но мне нужно сделать так, чтобы программа могла и читать файл, и записывать туда данные.

Отредактировано XFaost (Июнь 6, 2016 12:59:36)

Офлайн

#6 Июнь 6, 2016 14:56:07

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Проверка ip

ну так разнесите логику работы!
назначьте переменной значение чтения файла!
А дальше условие проверяющее ету переменную - если она не ноль - то пишем в файл и так далее
Хотя можно еще открыть как r+w

Встроенная функция open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True) — Открывает файл и возвращает соответствующий поток.
Вторым аргументом (все что в скобочках функции) является режим, в котором мы открываем файл. Есть такие режимы:

‘r’ — открытие на чтение (выступает значением по умолчанию).
‘w’ — открытие на запись, содержимое файла удаляется, если файла с таким именем нет, то он автоматически создается.
‘x’ — открытие на запись, если файл не существует, иначе исключение.
‘a’ — открытие на дозаписывание, информация добавляеться в конец уже существующей информации в файле.
‘b’ — открытие в двоичном режиме.
‘t’ — открытие в текстовом режиме (выступает значением по умолчанию).
‘+’ — открытие на чтение и запись.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Июнь 6, 2016 15:30:13

XFaost
Зарегистрирован: 2016-06-05
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка ip

ZerG
ну так разнесите логику работы! назначьте переменной значение чтения файла! А дальше условие проверяющее ету переменную - если она не ноль - то пишем в файл и так далееХотя можно еще открыть как r+w Встроенная функция open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True) — Открывает файл и возвращает соответствующий поток.Вторым аргументом (все что в скобочках функции) является режим, в котором мы открываем файл. Есть такие режимы:‘r’ — открытие на чтение (выступает значением по умолчанию).‘w’ — открытие на запись, содержимое файла удаляется, если файла с таким именем нет, то он автоматически создается.‘x’ — открытие на запись, если файл не существует, иначе исключение.‘a’ — открытие на дозаписывание, информация добавляеться в конец уже существующей информации в файле.‘b’ — открытие в двоичном режиме.‘t’ — открытие в текстовом режиме (выступает значением по умолчанию).‘+’ — открытие на чтение и запись.

уважаемый … это режимы для питон 3, а не для 2.7!

Traceback (most recent call last):
File “vtest.py”, line 4, in <module>
save = open(“save.txt”,“w+r”)
ValueError: Invalid mode ('w+r')

————————————————————————————————————-
Traceback (most recent call last):
File “vtest.py”, line 4, in <module>
save = open(“save.txt”,“+”)
ValueError: mode string must begin with one of ‘r’, ‘w’, ‘a’ or ‘U’, not ‘+’

Отредактировано XFaost (Июнь 6, 2016 15:37:09)

Офлайн

#8 Июнь 6, 2016 16:23:50

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Проверка ip

# -*- coding: utf-8 -*-
import socket
ip = socket.gethostbyname_ex(socket.gethostname())[2]
print 'ip = ', str(ip)
save = open("save.txt", "r+")
s = save.read()
if s:
    if str(s) == str(ip):
        print u"Совпало"
    else:
        # Тут будетвсе время дописывать инфу
        save.write(str(ip))
        print u"Не совпало"
else:
    print u"Новая запись"
    save.write(str(ip))
save.close()
Вобщето прекрасно работает! Но всеравно код ошибочен потому что будет дописывать файл все время а не перезаписывать его!
Так что правильно таки разносить логику на чтение файла для получения данных и на запись в него сходя из результатов.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#9 Июнь 6, 2016 16:48:06

XFaost
Зарегистрирован: 2016-06-05
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка ip

Очень благодарен вам за вашу помощь…

Отредактировано XFaost (Июнь 6, 2016 16:53:50)

Офлайн

#10 Июнь 6, 2016 16:59:40

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Проверка ip

я так понимаю, чтобы программа работала идеально - нужно ее писать через Python 3
Нет. Что бы программа работала идеально нужно ее идеально написать

import socket
ip = socket.gethostbyname_ex(socket.gethostname())[2]
with open('save.txt', 'r') as result:
    if str(ip) == str(result.read()):
        print 'Совпало'
    else:
        print 'Не совпало'
        with open('save.txt', 'w') as result:
            result.write(str(ip))



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Июнь 6, 2016 17:00:36)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version