Ответы пользователя по тегу Python
  • Как прочитать в экселе пути файлов, скачать их и разсортировать по папках?

    @MrSpirit
    С помощью openpyxl (можно конечно pandas, там это элементарно делается) читаете ваш Эксель, затем с помощью цикла и requests качаете файлы, если файлов очень много попробуйте написать асинхронный загрузчик, раз в 10 быстрее будет качать (поможет aiohttp и aiofiles). Ну а для создания папок вам пригодится os

    Вот так можно забрать весь столбец из Эксель
    import pandas as pd
    from glob import glob
    
    file = glob('*.xlsx')[0]
    table = pd.read_excel(file)
    urls_list = table['Название столбца'].to_list()


    А вот пример загрузчика, писал я (на идеальную правильность не претендую, со своей задачей справляется и хорошо)
    import asyncio
    import os
    from os.path import join as pth_join
    
    import aiofiles
    import aiohttp
    
    DWNLD_FLDR = "Download"
    
    
    async def download_file(session: aiohttp.ClientSession, link: str, file_name: str):
        async with session.get(link) as resp:
            if resp.status == 200:
                f = await aiofiles.open(pth_join(DWNLD_FLDR, file_name), "wb")
                await f.write(await resp.read())
                await f.close()
            else:
                print(f"Error: {resp.status}")
    
    
    async def gather_files(files_urls: list[dict]):
        async with aiohttp.ClientSession(headers=HEADERS) as session:
            tasks = []
            for item in files_urls:
                try:
                    if os.stat(pth_join(DWNLD_FLDR, item["file_name"])).st_size:
                        continue
                except FileNotFoundError:
                    pass
                task = asyncio.create_task(
                    download_file(session, item["file_link"], item["file_name"])
                )
                tasks.append(task)
            await asyncio.gather(*tasks)
    
    
    def main(file_list):
        os.makedirs(DWNLD_FLDR) if not os.path.exists(DWNLD_FLDR) else None
        asyncio.run(gather_files(file_list))
    
    if __name__ == "__main__":
        main([{'file_name': 'test.txt',  'file_link': 'http://file_url'}, ])
    Ответ написан
    Комментировать
  • Как записывать данные в xlsx в определенную ячейку с помощью python?

    @MrSpirit
    Попробуйте openpyxl
    Ответ написан
    Комментировать
  • Как запускать крон задачи из python virtual env?

    @MrSpirit
    Я делал так: cd python/project && source venv/bin/activate && python3 main.py
    Ответ написан
    3 комментария