нужен сценарий

совсем не вебразработки для но все же возникла задача
может кто то хорошо знаком с виндовыми консольными командами
чтоб создать bat файл который автоматизирует следующий процесс пакетной обработки

И так:
Есть файл index.html
В этой же директории файлы guby.jpg, piski.jpg, siski.jpg… *.jpg
Нужно создать файлы с такими же именами guby.html, piski.html, siski.html… *.html

содержимое всех html файлов должно быть одинаково и браться из index.html

Может есть какие то более тривиальные решения по одному клику

56 комментариев

  • аватар SeL
  • 0
на питоне реализуется в пару строчек
  • аватар SeL
  • 0
Я опять у компа, получиться что-то вроде:

import os, shutil
indexfile="index.html"
pageext="html"
imgext="jpg"
for filename in os.listdir(""):
    if os.path.isfile(filename) and filename.lower()[-len(imgext):]==imgext:
        shutil.copy(indexfile,filename[:-len(imgext)]+pageext)

можно сократить до 2 строчек точно в ущерб универсальности
  • аватар SeL
  • +2
необычное рядом, что отлично выполнялось в 2.5 версии интерпритатора не заработало в 2.7.
Патч: строку
for filename in os.listdir(""):
меняем на
for filename in os.listdir(os.path.dirname(__file__)):
Пользуясь случаем, хочу передать привет Ларри Уоллу и превратить этот кусок пейсона в верблюда кусок гамна пародию на перл

import os, shutil
[shutil.copy("index.html", f[:-len("jpg")]+"html") for f in os.listdir(os.path.abspath('')) if os.path.isfile(f) and f.lower()[-len("jpg"):]=="jpg"]

а можно как то текст html файла внедрить в этот сценарий?
html="ХУЙХУЙ"
теги пропали
  • аватар SeL
  • 0
Если я правильно понял, то да возможно:
import os,glob
html="""<html>
<head>HEAD</head>
<body><div>CONTENT</div></body>
</html>"""
pageext="html"
imgext="gif"
for filename in os.listdir(os.path.dirname(__file__)):
    if os.path.isfile(filename) and filename.lower()[-len(imgext):]==imgext:
        open(filename[:-len(imgext)]+pageext,"w").writelines(html)

Этот скрипт просто записывает код хранящийся в переменной в теле скрипта в создаваемые файлы
  • аватар SeL
  • +2
Что-то я еще не проснулся
1. ,glob из импорта можно смело удалять — не нужен
2. gif заменить на jpg, просто у меня папка с гифками нашлась для тестов
import os
html="""<html>
<head>HEAD</head>
<body><div>CONTENT</div></body>
</html>"""
pageext="html"
imgext="jpg"
for filename in os.listdir(os.path.dirname(__file__)):
    if os.path.isfile(filename) and filename.lower()[-len(imgext):]==imgext:
        open(filename[:-len(imgext)]+pageext,"w").writelines(html)
спасибо большое
ну может тогда совсем ахуенным будешь? и добавишь одну фишку? )
короче файлы эти хранятся в папке например
\dev (т.е. определить название деректории)

нужно залить на фтп в такую же папку например на ftp.fffff.com/dev/ (пароль логин есть)
и создать файл текстовый с ссылками вида
fffff.com/dev/file.html
fffff.com/dev/file2.html
fffff.com/dev/file3.html
а совсем круто если еще и в буфер обмена загнать )
  • аватар SeL
  • 0
про буфер обмена поподробнее
ну чтоб в буфере обмена оказались ссылки
//fffff.com/dev/file.html
//fffff.com/dev/file2.html
//fffff.com/dev/file3.html
  • аватар SeL
  • 0
ок понял
  • аватар SeL
  • 0
это сделать не проблема
ren index.html index.txt
xcopy *.jpg *.html /y
FOR %%A IN ("*.html") DO TYPE index.txt > %%A
del index.txt

во батник собрал

мне не очень удобно с интерпретатором ибо эти файлы на флешки качуют
но на домашнем буду юзать ))
спасибо пасаны )
пересаживайся на юникс, что ты как не пацан
Зачем? Скрипт написанный на Питоне будет одинаково корректно работать и на Винде, и на Юниксе. Правда ребята поленились и вместо готовой утилиты написали намек на нее.
А с какими правами он будет выполняться на винде? А то и гляди, кто-то подсунет в шутку завуалированный rm -rf /
Как и положено, исполняется с правами запускающего.
  • аватар SeL
  • 0
Давным давно я на флешке портабл питон таскал, тогда он был корявым очень, как щас — не знаю.
Ну на Маке, BSD и Линкусе интерпритатор уже будет стоять. А на винду поставить не долго. С портабл играл во времена 2.5, надо действительно глянуть во что они выросли.
  • аватар SeL
  • +2
html="""<html>
<head>HEAD</head>
<body><div>CONTENT</div></body>
</html>"""
import os,ftplib
pageext="html"
imgext="jpg"
ftppath="www"## this example for ftp.mysite.com/www/ if none ""
list_of_html="index.html"##file consist list of file in this directory
dirname=os.path.abspath("").split("\")[-1]
host,user,passwd="sitename.com","user","passwd"
ftp=ftplib.FTP(host)
ftp.login(user,passwd)
try:
    ftp.cwd(ftppath)
    try:
        ftp.mkd(dirname)
    except:
        print "directory is already exist"
    ftp.cwd(dirname)
    links=[]
    for filename in os.listdir(os.path.abspath("")):
        if os.path.isfile(filename) and filename.lower()[-len(imgext):]==imgext:
            open(filename[:-len(imgext)]+pageext,"w").writelines(html)
            links.append("<a href="//"+host+"/"+dirname+"/"+filename[:-len(imgext)]+pageext+"">
"+filename[:-len(imgext)]+pageext+"</a>")
            ftp.storbinary("STOR "+filename[:-len(imgext)]+pageext, open(filename[:-len(imgext)]+pageext,"r"), 128)
    open(list_of_html,"wb").writelines(links)
    ftp.storbinary("STOR "+list_of_html, open(list_of_html,"r"), 128)
except:
    print "fail path to ftp diectory"
ftp.quit()
ftppath: на фтп с которым я тестировал все лежит в папке www, если путь из нескольких директорий, то директории через слеши "/", если сразу в корне, то просто ""
list_of_html: имя файла создаваемого на сервере в папке допустим dev. Внимание!!! если на локальной машине в этой папке есть index.html, то надо переименовать
Имя директории в которой находится скрипт и картинки dirname скрипт вычисляет сам
т.е. я так понял чот list_of_html создается на фтп отже? я имел ввиду чотб на локальном в той же папке

а файлы jpg могут быть index.jpg, index2.jpg — сработает скрипт?
все понял! щас потестю
  • аватар SeL
  • 0
list_of_html создается и там и там. index.jpg да перезапишет index.html, щас переделаю быстренько
  • аватар SeL
  • +2
Патч: для исключения перезаписи уже существующего файла (случай index.jpg) строчки
            open(filename[:-len(imgext)]+pageext,"w").writelines(html)
            links.append("<a href="//"+host+"/"+dirname+"/"+filename[:-len(imgext)]+pageext+"">
"+filename[:-len(imgext)]+pageext+"</a>")
            ftp.storbinary("STOR "+filename[:-len(imgext)]+pageext, open(filename[:-len(imgext)]+pageext,"r"), 128)
заменить на
            if filename[:-len(imgext)]+pageext not in os.listdir(os.path.abspath("")):
                open(filename[:-len(imgext)]+pageext,"w").writelines(html)
                links.append("<a href="//"+host+"/"+dirname+"/"+filename[:-len(imgext)]+pageext+"">
"+filename[:-len(imgext)]+pageext+"</a>")
                ftp.storbinary("STOR "+filename[:-len(imgext)]+pageext, open(filename[:-len(imgext)]+pageext,"r"), 128)
Для того чтобы список не отправлять на сервер надо закоментить строчку:
##ftp.storbinary("STOR "+list_of_html, open(list_of_html,"r"), 128)
а если директория уже существует? скрипт продолжит заменять файлы?
  • аватар SeL
  • 0
В данной версии перетирает все при совпадении имен, в сообщении от 20:26 уже в принципе ничего не перетирает.
if filename[:-len(imgext)]+pageext not in os.listdir(os.path.abspath("")):
Проверка на отсутствие файла с таким же именем
у меня ругается на
dirname=os.path.abspath("").split("")[-1]
  • аватар SeL
  • 0
вот так подстава парсер сжирает обратный слэш в интерпритаторе питона везде должны стоять двойные слэши вот так
os.path.dirname(__file__).split("\\")[-1]
  • аватар SeL
  • 0
или
os.path.abspath("").split("\\")[-1]
links.append("<a href="//"+host+"/"+dirname+"/"+filename[:-len(imgext)]+pageext+"">
"+filename[:-len(imgext)]+pageext+"</a>")

и на это
Вот так ТЗ к концу проекта и появляется :)
  • аватар SeL
  • 0
с буфером обмена решение нагуглил, обычно мне он нужен в окнах, но там это решается средствами wx
а как теперь выловить что не так?
он мне пишет что папка существует а потом directory is already exist у меня там без www
  • аватар SeL
  • 0
directory is already exist — номально, значит папка с таким именем уже создана на сервере раньше
видимо дело в том, что он отправляет на фтп только те хтмл, которых еще нет в локальной директории
можно вынести строку
ftp.storbinary("STOR "+filename[:-len(imgext)]+pageext, open(filename[:-len(imgext)]+pageext,"r"), 128)
из под однго условия, либо удалить все созданные скриптом файлы, на сервер отправляются только вновь созданные, затирания больше нет
  • аватар SeL
  • 0
выносить не нужно, просто удалить локально созданные файлы и перезапустить скрипт
удалил они не пересоздаются… можно их принудительно всегда переписывать и отправлять на фтп заменяя все что там есть?
вынес из под условия (я так понимаю это делается удалением таба?)
но ничего не создается на локальном
и все так же остается 2 надписи :(
  • аватар SeL
  • 0
А что за надпись кроме directory is already exist, которая по идее должна всегда выводиться если такая директория уже есть, на запись туда файлов не влияет
ну он мне выводит сначала то что есть директория такая
а потом directory is already exist
и на локальном нихрена не создает
  • аватар SeL
  • 0
странно у меня этот скрипт работает отлично выдает только 1 сообщение, что папка уже была создана на фтп ранее и перезаписывает все локально и на фтп. Да и скрипте всего 2 принта 1 этот, второй что непрально указан путь к папке на фтп: «fail path to ftp diectory»
ага все вроде заработало мой касяк )
только мне нужно было чтоб картинки тоже капировались ) на сервак (забыл сказать)

  • аватар SeL
  • 0
Ну наконец то!!111
после строки:
ftp.storbinary("STOR "+filename[:-len(imgext)]+pageext, open(filename[:-len(imgext)]+pageext,"r"), 128)
нужно добавить на том же уровне вложенности строку:
ftp.storbinary("STOR "+filename, open(filename,"r"), 128)
ругаеца про indentationerror
  • аватар SeL
  • 0
С каким то отступом проблемы. Две последние строки на одном уровне: 3 табуляции от начала
  • аватар SeL
  • 0
Мелко слишком, не видно. У меня так:
Курск
странно но картинки заливаются по 20-30 кб хотя у меня лежат по 300-600
  • аватар SeL
  • +1
Действительно, только сейчас заметил. Я тестил на небольших по размеру картинках.
Вот код с изменениями. Правда заливает теперь файлы на фтпешник долго. Вот статистика с проверкой размера и временем заливки:
001.html - 69 B -> 69 B 0.118000030518 s
001.jpg - 458203 B -> 458203 B 44.8420000076 s
10486.html - 69 B -> 69 B 0.138999938965 s
10486.jpg - 802737 B -> 802737 B 78.4769999981 s
black buh.html - 69 B -> 69 B 0.109999895096 s
black buh.jpg - 802737 B -> 802737 B 78.5080001354 s
euro14_full.html - 69 B -> 69 B 0.0989999771118 s
euro14_full.jpg - 1093760 B -> 1093760 B 106.914000034 s
house.html - 69 B -> 69 B 0.101999998093 s
house.jpg - 726684 B -> 726684 B 71.0699999332 s
rf-15-airplane.html - 69 B -> 69 B 0.109999895096 s
rf-15-airplane.jpg - 439375 B -> 439375 B 43.0230000019 s
wallpaper-138772.html - 69 B -> 69 B 0.0979998111725 s
wallpaper-138772.jpg - 1369512 B -> 1369512 B 133.84800005 s
wallpaper-296618.html - 69 B -> 69 B 0.106000185013 s
wallpaper-296618.jpg - 1527958 B -> 1527958 B 149.324999809 s
wallpaper-417613.html - 69 B -> 69 B 0.136999845505 s
wallpaper-417613.jpg - 1297824 B -> 1297824 B 126.847000122 s
wallpaper-782165.html - 69 B -> 69 B 0.115000009537 s
wallpaper-782165.jpg - 548098 B -> 548098 B 53.638999939 s
wallpaper-807426.html - 69 B -> 69 B 0.12700009346 s
wallpaper-807426.jpg - 600501 B -> 600501 B 58.7309999466 s
приказ.html - 69 B -> 69 B 0.115000009537 s
приказ.jpg - 770177 B -> 770177 B 75.3179998398 s
В несколько потоков у меня не стало работать сразу ну и мучиться я не стал.
а я просто убрал там 128 и поставил «rb» и все заработало
метот тыка+гугл ))
  • аватар SeL
  • 0
Я просто только недавно до компа добрался.

Чтобы оставлять комментарии, нужно или зарегистрироваться.