Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 3, 2015 09:51:57

iNdexoiD
Зарегистрирован: 2014-06-27
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Подскажите со скриптом!

Есть скрипт,хотелось чтоб вместо одного email можно было добавлять ещё несколько,и вконце строк удалялись пустые пробелы.Плиз…

# !/usr/bin/python
# -*- coding: utf-8 -*-
# sort -u file.txt > newfile.txt  delete  dublikate
# cat * >> sborka.txt
import os
from re import search
from random import shuffle
def main():
#ʘʘʘ####################### Настройки ##########################
################################################################
    DIR_N = 1000   # количество нарезанных файлов в папке
    SPLIT_N = 51   # количество строк в одном файле
    DIR_NAME = "list_"  # имя дериктории (будет name1..nameN)
    MAIL_CHK = "multirbl@mail.ru"  # контрольный e-mail
################################################################
    mails = "eml.txt"  # файл с мыльниками
    bads = "bads.txt"    # файл с черным списком доменов
################################################################
    with open(mails, "r") as f:
        mails = [x.strip() for x in f.readlines()]
    with open(bads, "r") as f:
        bads = [x.strip() for x in f.readlines()]
    # remove dublicates
    len_before = len(mails)
    print "[+] Step 1: removing dublicates..."
    mails = list(set(mails))
    len_after = len(mails)
    print "...done! Removed %d dublicates!" % (len_before - len_after)
    # remove domains from BL
    len_before = len(mails)
    print "[+] Step 2: removing domains from blacklist..."
    mails = [line.strip() for line in mails if not search('|'.join(bads), line.partition('@')[2])]
    len_after = len(mails)
    print "...done! Removed %d bad domains!" % (len_before - len_after)
    # shuffle emails
    print "[+] Step 3: shuffling emails..."
    shuffle(mails)
    print "...done!"
    # spliting file for SPLIT_N lines with DIR_N files in each directory
    # add MAIL_CHK to each file
    print "[+] Step 4: splitting files for %d lines with %d files in each folder" % (SPLIT_N, DIR_N)
    dest = None
    count, file_n, dir_c = 0, 1, 1
    dirname = os.path.normpath(DIR_NAME + str(dir_c)) + os.sep
    try:
        os.mkdir(dirname)
    except OSError:
        pass
    for mail in mails:
        if file_n == DIR_N:
            dir_c += 1
            file_n = 1
            dirname = os.path.normpath(DIR_NAME + str(dir_c)) + os.sep
            try:
                os.mkdir(dirname)
            except OSError:
                pass
        if count % (SPLIT_N - 1) == 0:
            if dest:
                dest.write(MAIL_CHK + "\n")
                dest.close()
            dest = open(dirname + str(file_n), 'w')
            file_n += 1
        dest.write((mail + '\n'))
        count += 1
    print "...done!"
    print "[+] E-mail %s added to all files!" % MAIL_CHK
if __name__ == '__main__':
    main()

Отредактировано iNdexoiD (Фев. 3, 2015 10:15:29)

Прикреплённый файлы:
attachment comb.py (2,7 KБ)

Офлайн

#2 Фев. 4, 2015 00:24:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Подскажите со скриптом!

Нельзя весь код писать в одной функции. Нарушается читаемость, потому что нужно много запоминать.



Офлайн

#3 Фев. 4, 2015 04:58:44

iNdexoiD
Зарегистрирован: 2014-06-27
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Подскажите со скриптом!

py.user.next
Нельзя весь код писать в одной функции. Нарушается читаемость, потому что нужно много запоминать.
Вы сейчас это о чём? Скрипт у меня рабочий,нельзя разве добавить такую функцию?

Офлайн

#4 Фев. 4, 2015 10:43:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Подскажите со скриптом!

iNdexoiD
Вы сейчас это о чём?

Вот эти этапы
iNdexoiD
# загрузка адресов (я добавил)
iNdexoiD
# remove dublicates
iNdexoiD
# remove domains from BL
iNdexoiD
# shuffle emails
iNdexoiD
# spliting file for SPLIT_N lines with DIR_N files in each directory
iNdexoiD
# add MAIL_CHK to each file
должны быть в разных функциях.

Функции должны быть мелкими, помещающимися на одном экране (25 строк).
Когда у тебя код разделён на функции, то можно работать только с нужной функцией. Это не только упрощает понимание кода, но и не даёт поломать всю программу в результате изменений.

iNdexoiD
хотелось чтоб вместо одного email можно было добавлять ещё несколько
Вот у тебя там несколько мест, где есть работа с email. Возникает двусмысленность.
iNdexoiD
и вконце строк удалялись пустые пробелы
Вот у тебя там несколько мест, где есть работа со строками. Возникает двусмысленность.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version