V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
LinusChen
V2EX  ›  Python

小白初学 Python ,有没有大佬可以帮忙简化一下代码

  •  
  •   LinusChen · 2021-07-22 22:37:31 +08:00 · 2247 次点击
    这是一个创建于 1205 天前的主题,其中的信息可能已经有所发展或是发生改变。
    import pandas as pd
    import openpyxl
    #用来保存结果的列表
    two = []
    urltwo = []
    urltwoo = []

    three = []
    urlthree = []
    urlthreee = []


    four = []
    urlfour = []
    urlfourr = []

    five = []
    urlfive = []
    urlfivee = []

    letters = "abcdefghijklmnopqrstuvwxyz"

    #几位数,自己定
    ttwo = [a+b for a in letters for b in letters]
    tthree = [a+b+c for a in letters for b in letters for c in letters]
    ffour = [a+b+c+d for a in letters for b in letters for c in letters for d in letters]
    ffive = [a+b+c+d+e for a in letters for b in letters for c in letters for d in letters for e in letters]
    #域名后缀
    hz = "logistics.com.br"
    hz2 = "comex.com"

    #开始
    for k2 in ttwo:
    url2 = [k2 + hz]
    url22 = [k2 + hz2]

    urltwo.append(url2)
    urltwoo.append(url22)
    two = urltwo + urltwoo


    for k3 in tthree:
    url3 = [k3 + hz]
    url33 = [k3 + hz2]

    urlthree.append(url3)
    urlthreee.append(url33)
    three = urlthree + urlthreee


    for k4 in ffour:
    url4 = [k4 + hz]
    url44 = [k4 + hz2]

    urlfour.append(url4)
    urlfourr.append(url44)
    four = urlfour + urlfourr

    for k5 in ffive:
    url5 = [k5 + hz]
    url55 = [k5 + hz2]

    urlfive.append(url5)
    urlfivee.append(url55)
    five = urlfive + urlfivee

    #导出结果
    data = {'两个字母': two,'三个字母': three,'四个字母': four,'五个字母':five}
    frame = pd.DataFrame(data)
    frame.to_excel("E:\BaiduNetdiskWorkspace\个人\python\猜域名.xlsx")
    第 1 条附言  ·  2021-07-23 18:02:50 +08:00
    #感谢大家的建议,修改了一下代码,但是还是有两个问题,烦请各位大佬指点迷津
    #问题 1:不知道怎么处理 letter_permutations 才能组成 ab,ac,ad 这样的组合
    #问题 2:怎么才能去掉生成的 excel 第一列默认的数字索引
    import string
    import itertools
    import pandas as pd
    import openpyxl
    import requests
    import sys

    #Lowercase_alphabet,小写字母表
    Lowercase_alphabet = string.ascii_lowercase

    url = []
    result_url = []

    #定义一个函数来生成 url
    def web_guessing(n,domain)
    n = input('请输入你想生成几位数的组合')
    domain = raw_input('请输入你想组合的域名')
    letter_permutations = list(itertools.permutations(Lowercase_alphabet,n))

    #不知道怎么处理 letter_permutations 才能组成 ab,ac,ad 这样的字符串组合

    #将字母组合和域名组成网址
    for permutations in letter_permutations:
    url = [permutations+domain]
    #检测状态码,储存有效的 url
    r=requests.get(url,timeout=5)
    code = r.status_code
    if code == 200:
    result_url.append(url)

    #进行数据转换,输出到 excel
    data = {'%d位字母的域名组合'%n : result_url}
    frame = pd.DataFrame(data)
    frame.to_excel("E:\BaiduNetdiskWorkspace\个人\python\域名\猜域名.xlsx")
    return("结果保存在:E:\BaiduNetdiskWorkspace\个人\python\域名\猜域名.xlsx")
    7 条回复    2021-07-26 10:18:44 +08:00
    jaredyam
        1
    jaredyam  
       2021-07-22 23:34:44 +08:00
    你这已经不是简化的问题了,看了一半,提出两点提醒:
    1. 让变量名具有一定含义
    2. letters 这个变量可以通过标准库 import string; string.ascii_lowercase 进行调用
    wlsnx
        2
    wlsnx  
       2021-07-23 01:05:39 +08:00
    你可以试试 itertools.product
    ttwo = [''.join(chars) for chars in product(letters, repeat=2)]
    或者用 ttwo * letters 去生成 tthree
    tthree = [char + word for char in letters for word in ttwo]
    或者用 letters * two 去生成 three
    three = [[char + url[0]] for char in letters for url in two],这里顺序会不一致,如果要顺序一致,可以用 letters * two[0:len//2] + letters * two[len//2:]
    princelai
        3
    princelai  
       2021-07-23 10:24:29 +08:00
    应该是用排列吧,from itertools import permutations

    字符串相加可以放到 dataframe 里批量去加,这样比在循环里加然后 append 快很多
    RichXu
        4
    RichXu  
       2021-07-23 11:08:17 +08:00
    这个命名看得我脑阔疼
    xingheng
        5
    xingheng  
       2021-07-24 12:07:00 +08:00
    楼主你先了解一下 markdown code block 再说。
    Chares
        6
    Chares  
       2021-07-25 20:52:55 +08:00
    @RichXu 看了两眼直接翻到评论区看不下去了
    LinusChen
        7
    LinusChen  
    OP
       2021-07-26 10:18:44 +08:00
    @xingheng 我去学了下 markdown,感觉发现新大陆了,但是帖子删不了只能保持现状了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2857 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:23 · PVG 10:23 · LAX 18:23 · JFK 21:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.