MP3s kopieren!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

Hi leute ich hab mal ein kleines programm geschrieben!! HIer erst mal das program dan zum problem!

Code: Alles auswählen

from Tkinter import*
import os


class Hauptfenster:
	def Fenster(self):
		top = Tk()
		top.wm_geometry("400x200")
		top.title("MP3 Kopierer")

		F = Frame(top)
		F.pack(expand="true")

		lText = Label(F, text="Bitte in das erste Feld den Pfad und ins zweite den Dateinamen\n")
		lText.pack(side="top", expand="true")

		fEntry = Frame(F, border="1")
		ePfad = Entry(fEntry, width=40)
		ePfad.insert(0,"C:\Musik")
		ePfad.pack(side="left", expand="true")
		eDateiname = Entry(fEntry, width=20)
		eDateiname.pack(side="left", expand="true")
		fEntry.pack(side="top", expand="true")
		
		fEntry = Frame(F, border="1")
		lText1 = Label(F, text="Hier bitte das Laufwerk angeben auf welches die Datei\n gespeicehrt werden soll. Bai bedarf auch den Pfad\n")
		lText1.pack(side="top", expand="true")
		
		eLaufwerk = Entry(fEntry, width=20)
		eLaufwerk.pack(side="top", expand="true")
		fEntry.pack(side="top", expand="true")
		
		def evKopieren():
			gDateiname = eDateiname.get()
			gPfad = ePfad.get()
			gLaufwerk = eLaufwerk.get()
			
			inp = open(gPfad+gDateiname,"r")
			outp = open(gLaufwerk+gDateiname,"w")
			for line in inp.readlines():
			    outp.write(line)
			inp.close()
			outp.close()
			
		fButtons = Frame(F, border=1)
		bKopieren = Button(fButtons, text="Kopieren",width=10, height=1, command=evKopieren)
		bKopieren.pack(side="left", padx=6, pady=6)
		fButtons.pack(side="top", expand="true")

		F.mainloop()

oeffnenH = Hauptfenster()
oeffnenH.Fenster()
So das is es! Es funktioniert 100%! Bis auf das man noch keine MP3 Damit kopirenen kan! den wenn man die kopierte MP3 Datei dan abspielen möchte kommt eine fehlermeldung!

Vieleicht weiß jemand rat?
Auserdem hat jemand noch ne idee wie ich es erweitern könnte?
Ich wollte noch eine Pfad speicher Basteln den jedesmal den selber Pfad eingeben is öde und einen Butten der sofort den Pfad zu Eigene Musik in WIN XP reinschreibt!

Na ja!

Danke schonmal für antworten

Tschö

Vos

>Edit ich sehe gerad das dort noch steht print "1 File kopiert..." das war nur zu testzwecken kan nun weg!

und weg!
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Um eine Datei zu kopieren solltest du dir mal
das Shutil Modul angucken
http://docs.python.org/lib/module-shutil.html
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Vos hat geschrieben:

Code: Alles auswählen

		def evKopieren():
			gDateiname = eDateiname.get()
			gPfad = ePfad.get()
			gLaufwerk = eLaufwerk.get()
			
			inp = open(gPfad+gDateiname,"r")
			outp = open(gLaufwerk+gDateiname,"w")
			for line in inp.readlines():
			    outp.write(line)
			inp.close()
			outp.close()
Es funktioniert 100%! Bis auf das man noch keine MP3 Damit kopirenen kan!
Hi Vos!

Wie pr0stAta bereits schrieb, ist das Modul shutil genau das Richtige für dich. Allerdings möchte ich auch aufzeigen, warum es mit deinem Code nicht funktioniert.

Nur Textdateien kannst du öffnen und zeilenweise auslesen. Nur Textdateien kannst du zeilenweise schreiben.

Du öffnest beide Dateien wie eine Textdatei ("r" und "w"). Binärdateien solltest du mit "rb" und "wb" öffnen, damit Python sich nicht in die Verwaltung der Zeilenumbrüche einmischt.

Da es bei Binärdateien keine Zeilen gibt, sollest du nicht mir "readline()" sondern mit "read()" arbeiten. Nicht "writelines()" sondern "write()".

So sollte es funktionieren:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys

SOURCE = "/home/gerold/Desktop/UB40 - Kingston Town.mp3"
DESTINATION = "/home/gerold/Desktop/UB40 - Kingston Town2.mp3"

f_source = file(SOURCE, "rb")
f_dest = file(DESTINATION, "wb")

try:
    print "Starte Kopiervorgang"
    for data_piece in iter(lambda: f_source.read(102400), ""):
        f_dest.write(data_piece)
        sys.stdout.write(".")
finally:
    f_dest.close()
    f_source.close()

print "\nKopiervorgang abgeschlossen"
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

So ist es vielleicht etwas verständlicher:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys

SOURCE = "/home/gerold/Desktop/UB40 - Kingston Town.mp3"
DESTINATION = "/home/gerold/Desktop/UB40 - Kingston Town2.mp3"

f_source = file(SOURCE, "rb")
f_dest = file(DESTINATION, "wb")

try:
    print "Starte Kopiervorgang"
    while True:
        data_piece = f_source.read(102400)
        if data_piece:
            f_dest.write(data_piece)
            sys.stdout.write(".")
        else:
            break
finally:
    f_dest.close()
    f_source.close()

print "\nKopiervorgang abgeschlossen"
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

@pr0stAta: Jo dies hatte ich schon im Forum gefunden... Leider ist mein englisch nicht sehr gut man kann zwar übersetzten aber es klappte nicht so wirklich!

@Gerold: Danke schon mal ich probier deins aus!Wenn deins nicht funktionieren sollte (tuts eigenldich immer) dan werde ich mich mal mit "Shutil" ausanderesetzen!

Grüße und danke nochmal!

EDIT:

Also

Code: Alles auswählen

write(line)
Muss stehen bleiben, sonst kommt fehlmeldung! Sonst gehts nich aber dan funst es 100%! Nochmal danke das progi stell ich dan späte bei Codesnips rein!

Grüß

Grüße
BlackJack

Vos hat geschrieben:@pr0stAta: Jo dies hatte ich schon im Forum gefunden... Leider ist mein englisch nicht sehr gut man kann zwar übersetzten aber es klappte nicht so wirklich!

Code: Alles auswählen

import shutil
shutil.copyfile('ich_bin_ein_mp3.mp3', 'ich_bin_die_kopie.mp3')
Das war's schon.
Antworten