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 | 1263 (1009) | krneki0001 |
| » | Ruby + Glade ... težaveOddelek: Programiranje | 1753 (1546) | sebatronic |
| » | Microsoftova Encarta ukinjenaOddelek: Novice / Ostale najave | 4282 (3896) | 3p |
| » | [razvoj] klon windows commanderja za linux (strani: 1 2 3 )Oddelek: Programiranje | 7070 (5109) | napsy |
| » | Particije!Oddelek: Pomoč in nasveti | 967 (869) | [t502] |