Найти - Пользователи
Полная версия: Проверка ip
Начало » Python для экспертов » Проверка ip
1 2
XFaost
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()
	
ZerG
и?
XFaost
у меня так не получается: ошибка. исправьте, если можете
ZerG
1. Оформите код как положено используя для этого соответствующий тег!
2. Покажите какую ошибку вам пишет

XFaost
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”. Но мне нужно сделать так, чтобы программа могла и читать файл, и записывать туда данные.
ZerG
ну так разнесите логику работы!
назначьте переменной значение чтения файла!
А дальше условие проверяющее ету переменную - если она не ноль - то пишем в файл и так далее
Хотя можно еще открыть как r+w

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

‘r’ — открытие на чтение (выступает значением по умолчанию).
‘w’ — открытие на запись, содержимое файла удаляется, если файла с таким именем нет, то он автоматически создается.
‘x’ — открытие на запись, если файл не существует, иначе исключение.
‘a’ — открытие на дозаписывание, информация добавляеться в конец уже существующей информации в файле.
‘b’ — открытие в двоичном режиме.
‘t’ — открытие в текстовом режиме (выступает значением по умолчанию).
‘+’ — открытие на чтение и запись.
XFaost
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 ‘+’
ZerG
# -*- 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()
Вобщето прекрасно работает! Но всеравно код ошибочен потому что будет дописывать файл все время а не перезаписывать его!
Так что правильно таки разносить логику на чтение файла для получения данных и на запись в него сходя из результатов.
XFaost
Очень благодарен вам за вашу помощь…
ZerG
я так понимаю, чтобы программа работала идеально - нужно ее писать через 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))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB