Is there a way where I can replace the first '.' with '-' in my code for a domain generator

Question:

last time I’ve gotten some help on making a website name generator. I feel bad but i’m stuck at the moment and I need some help again to improve it. in my code there’s a .txt file called combined which included these lines.

Test Output

After that i created a variable to add to the domain

web = 'web'
suffix = 'co.id'

And then i write it out so that the it would print the line output to the Combined.txt

output_count = 50
subdomain_count = 2
for i in range(output_count):
    out = []
    for j in range(subdomain_count):
        out.append(random.choice(Test))
    out.append(web)
    out.append(suffix)
    Example.write('.'.join(out)+"n")

with open("dictionaries/examples.txt") as f:
    websamples = [line.rstrip() for line in f]

Combined.txt

I want the output where instead of just login.download.web.co.id there would be more variety like login-download.web.co.id or login.download-web.co.id In the code i used Example.write('.'.join(out)+"n") so that the. would be a separator for each characters. I was thinking of adding more, by making a similar code line and save it to a different .txt files but I feel like it would be too long. Is there a way where I can variate each character separation with this symbol - or _ instead of just a . in the output?

Thanks!

Asked By: Tsukuru

||

Answers:

As an alternative of replacing the final output, you could make the seperator random:

import random
seperators = ['-', '_', '.']

Example.write(random.choice(seperators).join(out)+"n")
Answered By: Alpa

Sure just iterate through a list of delimiters to add each of them to the output.

web = 'web'
suffix = 'co.id'
output_count = 50
subdomain_count = 2
delimeters = [ '-', '.']
for i in range(output_count):
    out = []
    for j in range(subdomain_count):
        out.append(random.choice(Test))
    for delimeter in delimeters:        
        addr = delimeter.join(out)
        addrs = '.'.join([addr, web, suffix])
        print(addrs)
        Example.write(addrs + 'n')

output

my_pay.web.co.id
my-pay.web.co.id
my.pay.web.co.id
pay_download.web.co.id
pay-download.web.co.id
pay.download.web.co.id
group_login.web.co.id
group-login.web.co.id
group.login.web.co.id
install_group.web.co.id
install-group.web.co.id
install.group.web.co.id
...
...

update

import itertools

Test = ['download', 'login', 'my', 'ip', 'site', 'ssl', 'pay', 'install']
delimeters = [ '-', '.']

web = 'web'
suffix = 'co.id'
output_count = 50
subdomain_count = 2
for combo in itertools.combinations(Test, 2):
    out = ''
    for i, d in enumerate(delimeters):
        out = d.join(combo)
        out = delimeters[i-1].join([out, web])
        addr = '.'.join([out, suffix])
        print(addr)
        # Example.write(addr+'n')

output

download-login.web.co.id
download.login-web.co.id
download-my.web.co.id
download.my-web.co.id
download-ip.web.co.id
download.ip-web.co.id
download-site.web.co.id
download.site-web.co.id
download-ssl.web.co.id
download.ssl-web.co.id
download-pay.web.co.id
download.pay-web.co.id
download-install.web.co.id
download.install-web.co.id
login-my.web.co.id
login.my-web.co.id
login-ip.web.co.id
login.ip-web.co.id
login-site.web.co.id
login.site-web.co.id
login-ssl.web.co.id
login.ssl-web.co.id
login-pay.web.co.id
login.pay-web.co.id
login-install.web.co.id
login.install-web.co.id
my-ip.web.co.id
my.ip-web.co.id
my-site.web.co.id
my.site-web.co.id
my-ssl.web.co.id
my.ssl-web.co.id
my-pay.web.co.id
my.pay-web.co.id
my-install.web.co.id
my.install-web.co.id
ip-site.web.co.id
ip.site-web.co.id
ip-ssl.web.co.id
ip.ssl-web.co.id
ip-pay.web.co.id
ip.pay-web.co.id
ip-install.web.co.id
ip.install-web.co.id
site-ssl.web.co.id
site.ssl-web.co.id
site-pay.web.co.id
site.pay-web.co.id
site-install.web.co.id
site.install-web.co.id
ssl-pay.web.co.id
ssl.pay-web.co.id
ssl-install.web.co.id
ssl.install-web.co.id
pay-install.web.co.id
pay.install-web.co.id
Answered By: Alexander

In order to ensure compliance with RFC 1035 I would suggest:

from random import choices as CHOICES, choice as CHOICE

output_count = 50
subdomain_count = 2
web = 'web'
suffix = 'co.id'
dotdash = '.-'

filename = 'output.txt'

Test = [
    'auth',
    'access',
    'account',
    'admin'
    # etc
]

with open(filename, 'w') as output:
    for _ in range(output_count):
        sd = CHOICE(dotdash).join(CHOICES(Test, k=subdomain_count))
        print('.'.join((sd, web, suffix)), file=output)
Answered By: OldBill
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.