@JRBRO

Как правильно писать код на питоне со многими функциями?

Вопрос больше наверное творческий.

Пишу разные скрипты упрощающие жизнь, из серии сортировок по папкам, переименовыванию файлов. Но тут возник вопрос, все это запускается через консоль, что портит все упрощение. Как правильнее всего заворачивать множество разных функций в один питон файл? Вопрос не просто в теории, а больше даже практике, как это действительно будет удобнее в будущем.

Большинство скриптов имеют простую структуру, некоторые с циклами.

В спойлерах прикреплю примеры скриптов, которые используются (каждый из них запускается теперь отдельно и не завернут в функции)

1
import os

folder = r'E:\demos\files\reports\\'
count = 1
# count increase by 1 in each iteration
# iterate all files from a directory
for file_name in os.listdir(folder):
    # Construct old file name
    source = folder + file_name

    # Adding the count to the new file name and extension
    destination = folder + "sales_" + str(count) + ".txt"

    # Renaming the file
    os.rename(source, destination)
    count += 1
print('All Files Renamed')

print('New Names are')
# verify the result
res = os.listdir(folder)
print(res)


2
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
for day in days:
  print (day)


3
from selenium import webdriver
import datetime
opt=webdriver.ChromeOptions()
opt.add_argument("--start-maximized")
driver= webdriver.Chrome(executable_path="C:\\chrome driver\\chromedriver.exe",options=opt)
driver.get("http://xfas.in/")

# put below lines in loop
timestamp = datetime.datetime.now().strftime('%d_%m_%Y_%H_%M_%S')
driver.get_screenshot_as_file(timestamp+'.png')
print('ok')


P.S. в примеры я добавил не конкретно свои скрипты, т.к. они очень длинные, но задачи абсолютно такие- сортировать/переименовывать файлы, качать скриншоты, печатать списки. Повторю вопрос, как правильно завернуть такие разные вещи в один питон файл, чтобы это было удобно и правильно с практической точки зрения
  • Вопрос задан
  • 100 просмотров
Решения вопроса 3
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Ну, - создаете модуль, куда добавляете функции и объявления из ваших примеров:
my_module.py:
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

def rename_file_to_sales(folder):
     for file_name in os.listdir(folder):
           ...

def get_url_as_screenshot(url):
     ...


да используете:
from my_module import rename_file_to_sales

rename_file_to_sales('somedir')


или там:
from my_module import days

for day in days:
   print(day)


главное - делать их более понятными и универсальными. К примеру в файлы не только с префиксом sales нужно переименовывать - делаете более универсальную функцию:

def rename_file_to_prefix(folder, prefix='sales', extension='txt'):
     for file_name in os.listdir(folder):
           destination = f"{folder}{prefix}_{str(count)}.{}"
Ответ написан
Комментировать
diplomatgmg
@diplomatgmg
Делаю что-то гениальное
Я не эксперт, у меня была похожая задача, можешь сделать это так:

main.py
import os
import rename
import days
import web



def main():
    while True:
        os.system('cls')
        print('''\nЧто Вы хотите сделать? 
        1. Переименовать
        2. Показать дни недели
        3. Получить скриншот''')

        while True:
            answer_main = input()
            if answer_main.isnumeric():
                answer_main = int(answer_main)
                break
            else:
                print('\nПовторите попытку! Введите цифру!')

        if answer_main == 1:
            rename.func_rename()

        if answer_main == 2:
            days.func_days()

        elif answer_main == 3:
             web.func_web()

        else:
            main()


if __name__ == '__main__':
    main()

rename.py
import os


def func_rename():
    folder = r'E:\demos\files\reports\\'
    count = 1
    # count increase by 1 in each iteration
    # iterate all files from a directory
    for file_name in os.listdir(folder):
        # Construct old file name
        source = folder + file_name

        # Adding the count to the new file name and extension
        destination = folder + "sales_" + str(count) + ".txt"

        # Renaming the file
        os.rename(source, destination)
        count += 1
    print('All Files Renamed')

    print('New Names are')
    # verify the result
    res = os.listdir(folder)
    print(res)

days.py
def func_days():
    days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
    for day in days:
      print (day)

web.py
from selenium import webdriver
import datetime

def func_web():
    opt=webdriver.ChromeOptions()
    opt.add_argument("--start-maximized")
    driver= webdriver.Chrome(executable_path="F:\Python\work\chromedriver.exe",options=opt)
    driver.get("http://xfas.in/")

    # put below lines in loop
    timestamp = datetime.datetime.now().strftime('%d_%m_%Y_%H_%M_%S')
    driver.get_screenshot_as_file(timestamp+'.png')
    print('ok')
Ответ написан
Комментировать
@mayton2019
Bigdata Engineer
Обычно делают функцию main, которая принимает строковые параметры типа:

$ python3 jrbro.py --sortFolder /home/jrbro
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы