Re: Filesplitter
Verfasst: Freitag 10. Dezember 2010, 19:37
Ne, dazu kannst du z.B. bitbucket oder github verwenden.Py-Prog hat geschrieben:Kann man in den Pastebin auch Dateien wie z. B. Icons Hochladen?
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Ne, dazu kannst du z.B. bitbucket oder github verwenden.Py-Prog hat geschrieben:Kann man in den Pastebin auch Dateien wie z. B. Icons Hochladen?
Py-Prog hat geschrieben:Und wieso sollte ein Dateiname einen Zeilen Umbruch haben?
Code: Alles auswählen
/tmp% touch 'foo
bar'
/tmp% ls -l 'foo
bar'
-rw-r--r-- 1 simon wheel 0 11 Dez 14:21 foo?bar
Die letzten Wochen hatte ich nicht so viel Zeit und konnte nicht weiter machen, aber jetzt bin ich dazu gekommen. Beim Versuch eine 1,25 GB Große Datei zu öffnen kam ein Fehler. Und jetzt würde mich interessieren wie du von eine Datei die ersten 512 MiB einlesen willst? Zeilen weile brauch ist erst gar nicht versuchen weil eine Datei keine Zeilenumbrüche haben muss.BlackJack hat geschrieben:Du liest immer noch die ganze aufzuteilende Datei komplett in den Speicher. Mach das mal mit einem DVD-Image.
Ich würde die auf einen Schlag eingelesene Datenmenge ja mindestens auf die Grösse der einzelnen Ausgabedateien beschränken.
Code: Alles auswählen
import os.path
def create_batch_file(path, end_path):
with open(path, 'r') as helpfile:
info=helpfile.readlines()
name=info[0].replace('\n', ''); del info[0]
batch_file_text='COPY /B '
for filename in info:
batch_file_text+='"'+filename.replace('\n', '')+'" '
if filename!=info[len(info)-1]:
batch_file_text+='+'
else:
batch_file_text+=' '+name
with open(os.path.join(end_path, name+'.bat'), 'w') as batchfile:
batchfile.write(batch_file_text)
def split(path, size, batchfile=False, end_path=None):
path_name_list=os.path.split(path)
directory=path_name_list[0]
name=path_name_list[1].replace('\n', '')
if end_path is None:
end_path=directory
count=0
with open(path, 'rb') as f:
filesize=os.path.getsize(path)
filepart_info=[name.replace('/', '')+'\n']
name=os.path.splitext(name)[0] #Löscht die endung des Dateinamen
while True:
if ((count*size)+size)>filesize:
filepart_info.append((name+str(count)+'.spl\n'))
with open(os.path.join(end_path, name+str(count)+'.spl'), 'wb') as splitfile:
splitfile.write(f.read(size))
break
else:
filepart_info.append(name+str(count)+'.spl\n')
with open(os.path.join(end_path, name+str(count)+'.spl'), 'wb') as splitfile:
splitfile.write(f.read(size))
count+=1
f.seek(count*size)
with open(os.path.join(end_path, name+'.help'), 'w') as helpfile:
helpfile.writelines(filepart_info)
if batchfile==True:
create_batch_file(os.path.join(end_path, name+'.help'), end_path)
def join(path, end_path=None):
if end_path is None:
end_path=path
with open(path, 'r') as helpfile:
info=helpfile.readlines()
with open(os.path.join(os.path.split(path)[0], info[0][0: len(info[0])-1]), 'wb') as unsplitfile:
del info[0] #Löscht den Dateinamen aus der liste
for datei in info:
datei=datei[0: len(datei)-1]
with open(os.path.join(end_path.replace('/', '\\'), datei), 'rb') as splitfile:
unsplitfile.write(splitfile.read())
Code: Alles auswählen
import tkinter
import tkinter.ttk
import tkinter.filedialog
import tkinter.messagebox
import os.path
import filesplitter
def split_window():
def quelle_suchen():
quelle=tkinter.filedialog.askopenfilename()
quelle_entry.delete(0, 'end')
quelle_entry.insert(0, quelle)
ziel_entry.delete(0, 'end')
ziel_entry.insert(0, os.path.dirname(quelle))
def ziel_suchen():
ziel=tkinter.filedialog.askdirectory()
ziel_entry.delete(0, 'end')
ziel_entry.insert(0, ziel)
def umrechnen():
bytetranslater={'Bytes': 0, 'Kibibytes': 10, 'Mebibytes': 20, 'Gibibytes': 30}
inbytes=int(float(groesse_entry.get().replace(',', '.'))*2**bytetranslater[einheit_combobox.get()])
return inbytes
def make_split_file():
try:
filesize=umrechnen()
except ValueError:
tkinter.messagebox.showerror('Fehler', 'Geben sie eine Zahl ein!')
except KeyError:
tkinter.messagebox.showerror('Fehler', 'Wählen sie eine Einheit aus!')
else:
try:
filesplitter.split(quelle_entry.get(), filesize, tkinter.messagebox.askyesno('Filesplitter', 'Soll eine Batchdatei erstellt werden?'), ziel_entry.get())
except IOError:
tkinter.messagebox.showerror('Fehler', 'Die Datei könnte nicht gesplittet werden!')
split_window=tkinter.Toplevel()
split_window.title('Filesplitter Split')
quelle_label=tkinter.Label(split_window, text='Quelle: ')
quelle_label.grid(row=0, column=0)
quelle_entry=tkinter.Entry(split_window, width=70)
quelle_entry.grid(row=0, column=1)
quelle_button=tkinter.Button(split_window, text='...', command=quelle_suchen)
quelle_button.grid(row=0, column=2)
ziel_label=tkinter.Label(split_window, text='Ziel: ')
ziel_label.grid(row=1, column=0)
ziel_entry=tkinter.Entry(split_window, width=70)
ziel_entry.grid(row=1, column=1)
ziel_button=tkinter.Button(split_window, text='...', command=ziel_suchen)
ziel_button.grid(row=1, column=2)
tkinter.Label(split_window).grid(row=2) #Erzeugt eine Leerzeile
groesse_label=tkinter.Label(split_window, text='Größe: ')
groesse_label.grid(row=3, column=0)
groesse_entry=tkinter.Entry(split_window, width=70)
groesse_entry.grid(row=3, column=1)
einheit_label=tkinter.Label(split_window, text='Einheit: ')
einheit_label.grid(row=4, column=0)
einheitvar = tkinter.StringVar()
einheit_combobox = tkinter.ttk.Combobox(split_window, textvariable=einheitvar, state='readonly')
einheit_combobox['values'] = ('Bytes', 'Kibibytes', 'Mebibytes', 'Gibibytes')
einheit_combobox.set('Mebibytes')
einheit_combobox.grid(row=4, column=1)
tkinter.Button(split_window, text='Splitten', command=make_split_file).grid(row=5, column=1)
def join_window():
def infodatei_suchen():
types=[('Informationsdatei',"*.help")]
infodatei=tkinter.filedialog.askopenfilename(filetypes=types)
infodatei_entry.delete(0, 'end')
infodatei_entry.insert(0, infodatei)
ziel_entry.delete(0, 'end')
ziel_entry.insert(0, os.path.dirname(infodatei))
def ziel_suchen():
ziel=tkinter.filedialog.askdirectory()
ziel_entry.delete(0, 'end')
ziel_entry.insert(0, ziel)
def zusammenfügen():
if os.path.isfile(infodatei_entry.get()) and os.path.isdir(ziel_entry.get()):
try:
filesplitter.join(infodatei_entry.get(), ziel_entry.get())
except IOError:
tkinter.messagebox.showerror('Fehler', 'Die Datei konnte nicht zusammen gefügt werden!')
else:
tkinter.messagebox.showerror('Fehler', 'Die angegebenen Pfäde sind nicht richtig eingegeben!')
join_window=tkinter.Toplevel()
join_window.title('Filesplitter Join')
infodatei_label=tkinter.Label(join_window, text='Infodatei: ')
infodatei_label.grid(row=0, column=0)
infodatei_entry=tkinter.Entry(join_window, width=70)
infodatei_entry.grid(row=0, column=1)
infodatei_button=tkinter.Button(join_window, text='...', command=infodatei_suchen)
infodatei_button.grid(row=0, column=2)
ziel_label=tkinter.Label(join_window, text='Ziel: ')
ziel_label.grid(row=1, column=0)
ziel_entry=tkinter.Entry(join_window, width=70)
ziel_entry.grid(row=1, column=1)
ziel_button=tkinter.Button(join_window, text='...', command=ziel_suchen)
ziel_button.grid(row=1, column=2)
tkinter.Button(join_window, text='Zusammenfügen', command=zusammenfügen).grid(row=2, column=1)
window=tkinter.Tk()
window.title('Filespliter')
window.geometry('500x30')
menubar=tkinter.Menu(window)
menu=tkinter.Menu(menubar)
menu.add_command(label='Splitten', command=split_window)
menu.add_command(label='Zusammenfügen', command=join_window)
menu.add_separator()
menu.add_command(label='Beenden', command=exit)
menubar.add_cascade(label='Datei', menu=menu)
window.config(menu=menubar)
tkinter.Label(window, text='Mit diesem Programm kann man Dateien Splitten und wieder zusammenfügen.').place(relx=0.2, rely=0.3)
tkinter.mainloop()
Code: Alles auswählen
string=string[0: len(string)-1]
Code: Alles auswählen
string=string[: -1]