nachstehend die erste fassung eines neuen programms von mir.
ihr könnt damit webseiten verändern, interessant ist z.b. folgendes.
in den 220 html seiten hat sich durch copy und paste ein fehler in einen der meta tags eingeschlichen, fein wenn man nicht manuell alle 220 seiten ausbessern muss

gibt sicherlich schon solche tools oder andere lösungswege, ich mags und habe es schon oft verwendet.
ich hoffe euch gefällt es, natürlich bin ich wie immer offen für konstruktive kritik und verbesserungsvorschläge,...
also los, das eigentliche programm:
Code: Alles auswählen
#!/usr/bin/env python
import ftplib, os
from Tkinter import *
from ScrolledText import*
import tkMessageBox
from ftptools import *
from filetools import read_content, change_content
class WindowForChangeContentFtp:
distance_x=5
distance_y=5
width=20
color="#FFFFFF"
def __init__(self):
self.root=Tk()
self.root.wm_geometry('+20+20')
self.root.title("Window")
self.root.resizable(0,0)
self.root.protocol("WM_DELETE_WINDOW", self.mainexit)
self.root.minsize=(300,200)
label_1=Label(self.root,bg=self.color,
text="///GARO_GUI")
label_1.grid(row=0,column=0,
columnspan=2,
padx=self.distance_x,
pady=self.distance_y)
label_2=Label(self.root,text="Find")
label_2.grid(row=1,column=0,
padx=self.distance_x,
pady=self.distance_y)
self.entry_1=Entry(self.root)
self.entry_1.grid(row=1,column=1,
padx=self.distance_x,
pady=self.distance_y)
label_3=Label(self.root,text="Replace")
label_3.grid(row=2,column=0,
padx=self.distance_x,
pady=self.distance_y)
self.entry_2=Entry(self.root)
self.entry_2.grid(row=2,column=1,
padx=self.distance_x,
pady=self.distance_y)
scrollbar_a=Scrollbar(self.root,orient="vertical")
self.listbox_a=Listbox(self.root,
width=50,height=20,
selectmode=MULTIPLE,
yscrollcommand=scrollbar_a.set)
scrollbar_a["command"]=self.listbox_a.yview
scrollbar_a.grid(row=3,column=2,
padx=self.distance_x,
pady=self.distance_y)
self.listbox_a.grid(row=3,
column=0,
columnspan=2,
padx=self.distance_x,
pady=self.distance_y)
scrollbar_b=Scrollbar(self.root,orient="vertical")
self.listbox_b=Listbox(self.root,
width=50,height=2,
selectmode=MULTIPLE,
yscrollcommand=scrollbar_b.set)
scrollbar_b["command"]=self.listbox_b.yview
scrollbar_b.grid(row=4,
column=2,
padx=self.distance_x,
pady=self.distance_y)
self.listbox_b.grid(row=4,
column=0,columnspan=2,
padx=self.distance_x,
pady=self.distance_y)
button_1=Button(self.root,
width=self.width,
text="Start",
command=self.work_file)
button_1.grid(row=5,column=0,
columnspan=2,
padx=self.distance_x,
pady=self.distance_y)
button_2=Button(self.root,text="Prog. Beenden",
width=10,command=self.ende)
button_2.grid(row=6,column=0,
columnspan=2,
padx=10,pady=10)
self.download_dir="./python_download"
if not os.path.exists(self.download_dir):
try:
os.mkdir(self.download_dir)
except OSError, msg:
self.showerror(msg,option=1)
try:
self.ftptools=FtpTools()
except IOError,msg:
self.showerror(msg,option=1)
try:
connect=self.ftptools.ftp_connect()
my_list=self.ftptools.ftp_list_html()
for i in range(len(my_list)):
self.listbox_a.insert("end",(my_list[i]))
except ftplib.all_errors,msg:
self.showerror(msg,option=1)
def evaluate(self):
find_string=self.entry_1.get()
if find_string=="":
self.showerror("Find darf nicht leer sein!")
else:
replace_string=self.entry_2.get()
replacements=[(find_string,replace_string)]
try:
choice=self.listbox_a.selection_get().split()
return choice, replacements
except TclError:
self.showerror("Dateien auswaehlen!")
def work_file(self):
try:
choice,replacements=self.evaluate()
try:
self.ftptools.ftp_download(self.download_dir,
choice)
except ftplib.error_temp:
self.conn=self.ftptools.ftp_connect()
self.ftptools.ftp_download(self.download_dir,
choice)
for filename in choice:
content=read_content(self.download_dir,filename)
content=change_content(content,replacements)
try:
self.ftptools.ftp_upload(filename,content)
self.listbox_b.insert(0,"Sucess, %s saved und uploaded!" % filename)
except ftplib.all_errors,msg:
self.showerror(msg)
except TypeError:
pass
def ende(self):
answer=tkMessageBox.askyesno("Warnung",
"Sicher beenden?")
if answer==1:
sys.exit(0)
def mainexit(self):
self.root.withdraw()
def showerror(self,info,option=0):
tkMessageBox.showerror("Fehler",info)
if option==1:
sys.exit(0)
if __name__=='__main__':
wfccf=WindowForChangeContentFtp()
mainloop()
Code: Alles auswählen
#!/usr/bin/env python
import ftplib, pickle, os
class FtpTools:
def __init__(self,ftp_dir='/html/crossover'):
current_path=os.getcwd()
data_path=current_path+'/ftpdata.txt'
f=file(data_path,'rb')
content=pickle.load(f)
f.close()
self.domain=content['domain']
self.user=content['user']
self.pwd=content['pwd']
self.ftp_dir=ftp_dir
def ftp_connect(self):
self.conn=ftplib.FTP(self.domain,
self.user,
self.pwd)
self.conn.cwd(self.ftp_dir)
def ftp_list_html(self,pattern="*htm*"):
import fnmatch
my_list=fnmatch.filter(self.conn.nlst(),pattern)
return my_list
def ftp_download(self,download_path,choice):
for element in choice:
f=file(download_path+'/'+element,'w')
self.conn.retrbinary('RETR %s' %element, f.write)
f.close()
def ftp_upload(self,filename, content):
from StringIO import StringIO
f = StringIO(content)
self.conn.storlines('STOR %s' % filename, f)
f.close()
if __name__=='__main__':
ftptools=FtpTools()
Code: Alles auswählen
#!/usr/bin/env python
def read_dir(my_path):
dir_index=[f for f in os.listdir(my_path)]
return dir_index
def read_content(my_path,filename):
f=file(my_path+'/'+filename,'r')
content=f.read()
f.close()
return content
def change_content(content,replacements):
for old, new in replacements:
content=content.replace(old, new)
return content
def write_new_file(filename,content):
f=file(download_dir+'/'+filename,'w')
f.write(content)
f.close()
grüße
rolgal