Переименование файлов на основе переменных в Python с помощью os rename - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь выяснить, как переименовать загруженный файл с NWZV1WB на HENRY.Бьюсь об заклад, прямо сейчас он загружает его как NWZV1WB, как его видит wget.

Важное примечание: у файлов всегда есть номера в конце NWZV1WB-1.jpg NWZV1WB-2.jpg NWZV1WB-3.jpg

Мой код выглядит так: ( Генри Юань - помог мне)

import wget
import os
import multiprocessing


def run_process(url, output_path):
    wget.download(url, out=output_path)


if __name__ == '__main__':
    cpus = multiprocessing.cpu_count()
    max_pool_size = 4
    pool = multiprocessing.Pool(cpus if cpus < max_pool_size else max_pool_size)
    base_dir = os.path.dirname(os.path.abspath(__file__))
    prefix_list = ["NWZV1WB"]
    folder_name_list = ["HENRY"]  
    download_list = []
    name_list = list(range(1, 7))
    for index, prefix in enumerate(prefix_list):  # return index and item
        folder_name = folder_name_list[index]  # changed
        path = os.path.join(base_dir)
        if not os.path.exists(path):
            os.mkdir(path)
        if not os.path.isdir(path):
            exit()
        for name in name_list:
            download_list.append(['https://example.com/{p}-{n}.jpg'.format(n=name, p=prefix), path])

    for url, path in download_list: 
        pool.apply_async(run_process, args=(url, path, ))
    pool.close()
    pool.join()

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Виновник в этой строке:

path = os.path.join(base_dir)

Как вы можете видеть в исходном коде , когда только один метод аргумента join просто возвращает его (что, вероятно, не то, что вы хотели).

def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        ...
    return path

Коди уже предоставил вам ответ, я просто сделаю его немного чище с Python 3.6+ f-strings .

for name in name_list:
    file_path = os.path.join(base_dir, f'{folder_name}-{name}.jpg')
    download_list.append([f'https://example.com/{prefix}-{name}.jpg', file_path])
0 голосов
/ 30 августа 2018

Ваш вопрос немного сбивает с толку, но с веткой комментариев, я думаю, я собрал воедино то, что вы пытаетесь сделать.В настоящее время вы выводите:

Old name:      New name:
NWZV1WB-1.jpg  NWZV1WB-1.jpg

Desired output is:
NWZV1WB-1.jpg  HENRY-1.jpg

Имя вашего нового файла заносится в переменную path в списке загрузки.Попробуйте это:

for name in name_list:
    path = 'your path'
    newfile = path + folder_name +'-{n}.jpg'.format(n=name)
    download_list.append(['https://example.com/{p}-{n}.jpg'.format(n=name, p=prefix), newfile])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...