Forum » Programiranje » [Python] Pomoč pri delu z datotekami
[Python] Pomoč pri delu z datotekami
strelajasna ::
Pozdravljeni.
Za fax imam za narediti projekt v pythonu. Izbral sem si preprost programček za delo z datotekami. Programečk mora znati preimenovati vse datoteke v mapi v isto ime in na koncu z zaporedno številko, narediti zip arhiv mape (tudi podmap), poiskati največjo datoteko v mapi (in podmapah) in najti največjo datoteko na disku.
Usplo mi je narediti večino, vendar se mi je pri metodah utavilo. Javlja mi napake, ki jih ne znam rešit.
Koda:
In kje so problemi?
1. pri preimenovanju vseh datotek, ne morem preimenovati z uporabo os.rename. Če samo izpišem stara in nova imena, mi jih izpiše prav, ko ivedem os.rename, mi javi napako: "Traceback (most recent call last): OSError: [Errno 2] No such file or directory!"
2. arhiviranje mi tudi javlja napako:
"Traceback (most recent call last): File "projekt.py", line 53, in zip_folder for root, folders, files in contents:
File "/usr/lib/python2.7/os.py", line 276, in walk
names = listdir (top)
TypeError: coercing to Unicode: need string or buffer, gtk.Entry found
3. Iskanje največje datoteke mi dela samo v trenutni mapi, ne tudi v podmapah
4. do iskanja največje datoteke na disku nisem še uspeu prti, ker ne znam že pri prejšnji točki narediti iskanja v podmape
S tem se matram že nekaj časa, pregledal sem veliko tutorialov, poskusu različne možnosti, ampak ne morem anrediti da bi delalo. Prosim vas za pomoč, če se komu da pogledati in mi pomagati.
Hvala in LP
-- Naslednjič prosim uporabi st.koda tage da bo kaj berljivo :) -- moderator
Za fax imam za narediti projekt v pythonu. Izbral sem si preprost programček za delo z datotekami. Programečk mora znati preimenovati vse datoteke v mapi v isto ime in na koncu z zaporedno številko, narediti zip arhiv mape (tudi podmap), poiskati največjo datoteko v mapi (in podmapah) in najti največjo datoteko na disku.
Usplo mi je narediti večino, vendar se mi je pri metodah utavilo. Javlja mi napake, ki jih ne znam rešit.
Koda:
# -*- coding: utf-8 -*- import pygtk pygtk.require('2.0') import gtk import os import Image import zipfile import sys class urejanjeDat: def delete_event(self, widget, event, data=None): gtk.main_quit() return False def prebrskaj (self, widget, entry): dialog = gtk.FileChooserDialog("Izberi mapo:", None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) dialog.set_default_response(gtk.RESPONSE_OK) izbor = dialog.run() if izbor == gtk.RESPONSE_OK: entry.set_text(dialog.get_filename()) elif izbor == gtk.RESPONSE_CANCEL: print "Prekinitev" dialog.destroy() def rename (self, widget, entry1, entry2): ind = entry1.get_text() novoIme = entry2.get_text() num = 0 for datoteka in os.listdir(ind): koncnica2 = datoteka.split(".")[len(datoteka.split("."))-1] num += 1 novoime = novoIme + str(num) + "." + koncnica2 #os.rename(datoteka, novoime) # preimenuje print novoime def zip_folder(self, widget, entry1, entry3): parent_folder = entry1.get_text() contents = os.walk(entry1) output_path = entry3.get_text() try: zip_file = zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) for root, folders, files in contents: for folder_name in folders: absolute_path = os.path.join(root, folder_name) relative_path = absolute_path.replace(parent_folder + '\\','') print "Adding '%s' to archive." % absolute_path zip_file.write(absolute_path, relative_path) for file_name in files: absolute_path = os.path.join(root, file_name) relative_path = absolute_path.replace(parent_folder + '\\','') print "Adding '%s' to archive." % absolute_path zip_file.write(absolute_path, relative_path) print "'%s' created successfully." % entry3 except IOError, message: print message sys.exit(1) except OSError, message: print message sys.exit(1) except zipfile.BadZipfile, message: print message sys.exit(1) finally: zip_file.close() def search(self, widget, entry1): dir = entry1.get_text() global biggest biggest = ("", -1) for item in os.listdir(dir): item = dir + "/" + item if os.path.isdir(item): search(item) else: itemsize = os.path.getsize(item) if itemsize > biggest[1]: biggest = (item, itemsize) print biggest def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_title("Urejanje datotek") self.window.connect("delete_event", self.delete_event) table = gtk.Table(8, 3, False) self.window.add(table) # dodamo oknu table.show() #brskanje napis1 = gtk.Label("Izberi mapo: ") table.attach(napis1, 0, 1, 0, 1) napis1.show() entry1 = gtk.Entry(max=0) # vnosno polje neomejene dol?ine entry1.set_text(os.getcwd()) table.attach(entry1, 1, 2, 0, 1) entry1.show() gumb1 = gtk.Button("Prebrskaj") gumb1.connect("clicked", self.prebrskaj, entry1) table.attach(gumb1, 2, 3, 0, 1) gumb1.show() #preimenovanje naslov2 = gtk.Label("PREIMENOVANJE") table.attach(naslov2, 0, 1, 1, 2) naslov2.show() napis2 = gtk.Label("Novo ime: ") table.attach(napis2, 0, 1, 2, 3) napis2.show() entry2 = gtk.Entry(max=0) # vnosno polje neomejene dol?ine table.attach(entry2, 1, 2, 2, 3) entry2.show() gumb2 = gtk.Button("Preimenuj") gumb2.connect("clicked", self.rename, entry1, entry2) table.attach(gumb2, 2, 3, 2, 3) gumb2.show() #arhiviranje naslov3 = gtk.Label("ARHIVIRANJE") table.attach(naslov3, 0, 1, 3, 4) naslov3.show() napis3 = gtk.Label("Izberi ime arhiva: ") table.attach(napis3, 0, 1, 4, 5) napis3.show() entry3 = gtk.Entry(max=0) # vnosno polje neomejene dol?ine table.attach(entry3, 1, 2, 4, 5) entry3.show() gumb3 = gtk.Button("Arhiviraj") gumb3.connect("clicked", self.zip_folder, entry1, entry3) table.attach(gumb3, 2, 3, 4, 5) gumb3.show() #najve?ja datoteka v imeniku gumb4 = gtk.Button("Najdi najve?jo datoteko v imeniku") gumb4.connect("clicked", self.search, entry1) table.attach(gumb4, 1, 2, 5, 6) gumb4.show() #najve?ji imenik na disku gumb5 = gtk.Button("Najdi najve?ji imenik na disku") gumb5.connect("clicked", self.search, entry1) table.attach(gumb5, 1, 2, 6, 7) gumb5.show() #quit gumb6 = gtk.Button("Quit") gumb6.connect("clicked", lambda w: gtk.main_quit()) table.attach(gumb6, 1, 2, 7, 8) gumb6.show() self.window.show() def main(self): gtk.main() def main (): gtk.main() return 0 if __name__ == "__main__": urejanjeDat() main()
In kje so problemi?
1. pri preimenovanju vseh datotek, ne morem preimenovati z uporabo os.rename. Če samo izpišem stara in nova imena, mi jih izpiše prav, ko ivedem os.rename, mi javi napako: "Traceback (most recent call last): OSError: [Errno 2] No such file or directory!"
2. arhiviranje mi tudi javlja napako:
"Traceback (most recent call last): File "projekt.py", line 53, in zip_folder for root, folders, files in contents:
File "/usr/lib/python2.7/os.py", line 276, in walk
names = listdir (top)
TypeError: coercing to Unicode: need string or buffer, gtk.Entry found
3. Iskanje največje datoteke mi dela samo v trenutni mapi, ne tudi v podmapah
4. do iskanja največje datoteke na disku nisem še uspeu prti, ker ne znam že pri prejšnji točki narediti iskanja v podmape
S tem se matram že nekaj časa, pregledal sem veliko tutorialov, poskusu različne možnosti, ampak ne morem anrediti da bi delalo. Prosim vas za pomoč, če se komu da pogledati in mi pomagati.
Hvala in LP
-- Naslednjič prosim uporabi st.koda tage da bo kaj berljivo :) -- moderator
- spremenil: Mavrik ()
FrEaKmAn ::
1.
http://stackoverflow.com/questions/2759...
2.
am, ali je koda v projekt.py ista kot ta, ki si jo postal. Ne morem ugotoviti kje točno vrže ven, ker glede na napako je nekaj narobe v vrstici 53.. samo tam je čisto nekaj drugega
3.
osebno bi search malo drugače naredil, namesto da imaš global biggest, bi kot parameterer metodi podajal velikost največje in njeno pot (default 0 in None). Potem pa kot si začel, gledaš rekurzivno in če je večja, jo vrneš, če manjša pa tisto v parametrih.. upam da je jasno...
4.
prvo 3 reši
5. čisto informativno, kateri faks?
http://stackoverflow.com/questions/2759...
2.
am, ali je koda v projekt.py ista kot ta, ki si jo postal. Ne morem ugotoviti kje točno vrže ven, ker glede na napako je nekaj narobe v vrstici 53.. samo tam je čisto nekaj drugega
3.
osebno bi search malo drugače naredil, namesto da imaš global biggest, bi kot parameterer metodi podajal velikost največje in njeno pot (default 0 in None). Potem pa kot si začel, gledaš rekurzivno in če je večja, jo vrneš, če manjša pa tisto v parametrih.. upam da je jasno...
4.
prvo 3 reši
5. čisto informativno, kateri faks?
Zgodovina sprememb…
- spremenil: FrEaKmAn ()
strelajasna ::
2. Javlja tocno to napako,vendar se je zgleda zgubilo nekaj enterjev. Prava vrstica napake je 51.
5. FAMNIT v Kopru
hvala za pomoc
5. FAMNIT v Kopru
hvala za pomoc
FrEaKmAn ::
si 100%..
imam bolj občutek da je problem v vrstici 44 v tej kodi ki si jo dodal. tvoj parameter entry1 je tipa gtk.Entry medtem ko os.walk (http://docs.python.org/library/os.html#... sprejema samo stringe....
imam bolj občutek da je problem v vrstici 44 v tej kodi ki si jo dodal. tvoj parameter entry1 je tipa gtk.Entry medtem ko os.walk (http://docs.python.org/library/os.html#... sprejema samo stringe....
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Razvoj v Qt ali GTKOddelek: Pomoč in nasveti | 1138 (884) | krneki0001 |
» | Ruby + Glade ... težaveOddelek: Programiranje | 1605 (1398) | sebatronic |
» | Microsoftova Encarta ukinjenaOddelek: Novice / Ostale najave | 3874 (3488) | 3p |
» | [razvoj] klon windows commanderja za linux (strani: 1 2 3 )Oddelek: Programiranje | 6623 (4662) | napsy |
» | Particije!Oddelek: Pomoč in nasveti | 845 (747) | [t502] |