Итеративный запуск Python-скрипта из CSV-файла

Вопрос или проблема

Я пытаюсь адаптировать скрипт на Python, чтобы его можно было запустить с файлом CSV, содержащим список значений, т.е. аргументов. Каждая строка в файле CSV требует повторного выполнения скрипта.

Вот мой простой скрипт ‘myscript.py’:

#! /usr/bin/env python3

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('url', help='входной URL')

args = parser.parse_args()

print('Это аргумент')
print(args.url)

который я запускаю с помощью python3 myscript.py https://www.bbc.co.uk

и он выводит:

Это аргумент
https://www.bbc.co.uk

Теперь, если у меня есть файл CSV ‘urls.csv’, я хочу иметь возможность запустить: python3 myscript.py urls.csv

Так, чтобы из списка URL-адресов скрипт запустился необходимое количество раз и выдал:

Это аргумент
https://www.bbc.co.uk
Это аргумент
https://www.itv.com
Это аргумент
https://www.channel4.com
Это аргумент
https://www.channel5.com

Могу ли я добиться этого, используя какую-то вариацию инструкций argparse, или это требует другого скрипта в качестве своего рода обертки?

Ответ или решение

Вы можете адаптировать свой Python-скрипт так, чтобы он считывал значения URL из CSV-файла и запускал основную программу для каждого URL в файле. Для этого вам не потребуется изменять логику использования argparse. Вместо этого можно добавить функциональность для обработки CSV. Вот как это можно сделать:

Шаги для реализации

  1. Импортировать необходимые библиотеки: Вам понадобятся csv для работы с CSV-файлом и argparse для обработки аргументов командной строки.

  2. Чтение CSV файла: Используя библиотеку csv, вы сможете прочитать файл и извлечь URL из него.

  3. Цикл по URL: После получения списка URL вы можете итерироваться по каждому URL и вызывать основную логику вашего скрипта.

Вот как может выглядеть ваш обновленный скрипт:

#! /usr/bin/env python3

import argparse
import csv
import sys

def process_url(url):
    print('Это аргумент')
    print(url)

def main(args):
    if args.input_file:
        with open(args.input_file, newline='') as csvfile:
            reader = csv.reader(csvfile)
            for row in reader:
                if row:  # Проверка, что строка не пустая
                    url = row[0]
                    process_url(url)
    else:
        # Если URL передан непосредственно, используем его
        process_url(args.url)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('url', nargs='?', help='вводимый URL')
    parser.add_argument('--input_file', help='CSV файл с URL')

    args = parser.parse_args()

    main(args)

Объяснение кода

  1. Использование argparse: В обновленном скрипте добавлен необязательный аргумент --input_file. Это позволит вам указывать путь к вашему CSV-файлу при запуске.

  2. Функция process_url: Создана отдельная функция для обработки URL, что делает код более чистым и повторно используемым.

  3. Чтение CSV файла: Если передан аргумент --input_file, скрипт открывает файл, считывает строки с помощью csv.reader, а затем обрабатывает каждую строку. В ситуации, если url также передан, он будет обработан единожды.

Пример запуска скрипта

  • Для запуска скрипта с URL напрямую:

    python3 myscript.py https://www.bbc.co.uk
  • Для запуска скрипта с CSV-файлом:

    python3 myscript.py --input_file urls.csv

Заключение

Теперь ваш скрипт ‘myscript.py’ может работать как с отдельными URL, так и читать их из CSV-файла, выполняя логику для каждого URL, найденного в файле. Это улучшит гибкость и удобство использования вашего скрипта.

Оцените материал
Добавить комментарий

Капча загружается...