读取txt文件并作为url中的变量传递

时间:2019-02-25 23:23:01

标签: python

大家好,我是python新手,我尝试完成一项任务。 任务如下:我需要读取一个名为“ ip.txt”的文件,并逐行读取该文件,然后使用urlopen将txt文件行传递到URL。

这是我的剧本

from urllib.request import urlopen

def send_alert():
    from smtplib import SMTP
    from email.mime.text import MIMEText

    msg = MIMEText('nuf said')
    msg['Subject'] = 'inventi.lt is unreachable'
    msg['From'] = 'XXX@xxxx.com'
    msg['To'] = 'jnin@xxxx.com'

    server = SMTP('mail.xxxxxx.com:2525')
    server.ehlo()
    server.starttls()
    server.login('jnin@xxxxx.com', 'password')
    server.sendmail('jnin@xxxx.com', ['jnin@xxx.com'], msg.as_string())
    server.quit()

###### LEER FILE
ip_dirreciones = open("ip.txt", "r")

try:
    urlopen ('http://VARIABLE-HERE/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT')

    print ("OK")
except:
    send_alert()

想法是该脚本将自动运行文本文件中的每一行

样本

http://1.1.1.1/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT
http://1.1.1.3/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT
http://1.1.1.2/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT

更新

我取得了一些进步,但并没有一直工作。我只需要脚本能够读取和使用 ip.txt 文件的每一行即可。

它仅读取第一行,然后停止。 这是代码

from urllib.request import urlopen


def send_alert():
    from smtplib import SMTP
    from email.mime.text import MIMEText

    msg = MIMEText('nuf said')
    msg['Subject'] = 'inventi.lt is unreachable'
    msg['From'] = 'email@email.com'
    msg['To'] = 'email@email.com'

    server = SMTP('mail.domain.com:2525')
    server.ehlo()
    server.starttls()
    server.login('email@email.com', 'password!')
    server.sendmail('email@email.com', ['email@email.com'], msg.as_string())
    server.quit()

###### LEER FILE
f = open("ip.txt", "r")
for x in f:

 # print('http://'+ x +'/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT')

try:
    urlopen ('http://'+ x +'/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT')

    print ("OK")
except:
    send_alert()

1 个答案:

答案 0 :(得分:2)

您从以下文件中读取内容:

with open('ip.txt', 'r') as file:
    link_list = file.readlines()

这将创建一个列表,其中.txt文件的每一行都将转换为列表中的项目。然后,您可以遍历此列表以依次使用每个项目!

如果您的问题是关于组合字符串以建立链接(如您的.txt文件中包含的内容:

  1. 1.1.1.1
  2. 1.1.1.2
  3. 1.1.1.3)

那么你会说:

for link in link_list:
    urlopen ('http://{}/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT'.format(link))

这将动态地将{}填充为link

@EDIT

在您的评论中,您说b'192.168.0.77\n'的标头中有一个错误,这是因为当程序期望字符串时,会给您一堆字节。可以通过以下方法避免这种情况:

urlopen ('http://{}/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT'.format(link.decode('utf-8')))

唯一的区别是我们将.decode()更改为utf-8字符串!