Python-如果文件中的字符串以16开头

时间:2019-05-13 13:35:23

标签: python python-3.x if-statement

我有一个脚本,可以检查PC上的IP地址并将其写入PC上的文件-正常工作

import socket
import sys
import requests
import urllib.request
import shutil
import subprocess
from time import sleep
import os
from os import system

# URL for download
URL = 'https://here/app.exe'

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 1))
local_ip_address = s.getsockname()[0]
sys.stdout = open("C:\\Temp\\nw_check.txt", "w+")
print(s.getsockname() [0])

现在我想下一步

检查文件C:\ Temp \ nw_check.txt,如果该文件中的IP地址以116、115、117开头,则使用我将设置的代理下载上述应用程序。如果它以其他任何内容开头,则继续下载

if xxxxxx(xxxxxxxx()).startswith(('116', '115', '117')):
    r = requests.get(URL, stream=True, proxies={'http': 'http://proxy:6547', 'https': 'http://proxy:6547'})
else:
    r = requests.get(URL, stream=True)

3 个答案:

答案 0 :(得分:1)

  

sys.stdout = open(“ C:\ Temp \ nw_check.txt”,“ w +”)

     

print(s.getsockname()[0])

为什么要将文件设置为stdout然后打印而不是直接打印/写入文件?

with open("C:\\Temp\\nw_check.txt", "w+") as f:
    print(s.getsockname()[0], file=f)
    # of f.write(str(s.getsockname()[0])); f.write('\n')
  

检查文件C:\ Temp \ nw_check.txt,并且该文件中的IP地址是否以116、115、117开头

为什么要浏览中间文件?为什么不直接检查s.getsockname() [0]的结果呢?

除此之外: 1.如果您使用的是上面的代码,并且在“ with”下面,或者位于其他文件中,请以r模式重新打开文件,读取前3个字符,然后检查这是否是您的重新寻找:

with open("C:\\Temp\\nw_check.txt", "w+") as f:
    print(s.getsockname()[0], file=f)
with open(fname, 'r') as f:
    if f.read(3) in ('116', '115', '117'):
        # etc…
  1. 或2(如果您使用的是原始代码)或将其放在上述with内,请执行seek(0)将光标移回文件的开头,然后读取前3个字符,然后检查。
sys.stdout.seek(0)
if f.read(3) in ('116', '115', '117'):
    # etc…

答案 1 :(得分:0)

再次打开文件并读取IP地址:

with open("C:\\Temp\\nw_check.txt", "r") as ip_file:
    ip_address = ip_file.readline()

if ip_address.startswith(("115", "116", "117")):
        # and so on

答案 2 :(得分:0)

一些满足您需求的变体应该起作用:

with open("C:\\Temp\\nw_check.txt", "r") as input_file:
    for ip_address in input_file:
        if ip_address.startswith(("115", "116", "117")):
            r = requests.get(URL, stream=True, proxies={'http': 'http://proxy:6547', 'https': 'http://proxy:6547'})
        else:
            r = requests.get(URL, stream=True)

由于文件只有一行,因此for循环仅运行一次并退出。