Sida 1 av 1
Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:15
av Iceron
Jo, jag vill göra ett program som skriver ut flera mappar, från datum x till datum y.
men när den kommeri n i den delen där den ska skapa en mapp så går det åt pipan.
Traceback (most recent call last):
File "/home/iceron/Desktop/docs/python/datum.py", line 39, in <module>
print_folder()
File "/home/iceron/Desktop/docs/python/datum.py", line 11, in print_folder
os.mkdir(from_year, s, from_month, s, from_day)
UnboundLocalError: local variable 'from_year' referenced before assignment
Kod: Markera allt
#!/usr/bin/env python
#Writes files with date
import os
def print_folder():
while True:
if to_year + to_month + to_day == to_year + to_month + to_day:
break
os.mkdir(from_year, s, from_month, s, from_day)
from_day = from_day + 1
if from_month + from_day == 43:
from_year = from_year + 1
if from_day == 31:
from_day = 1
from_month = from_month + 1
if from_month == 13:
from_month = 1
s = "-"
from_year = int(raw_input("from year?"))
from_month = int(raw_input("from month?"))
from_day = int(raw_input("from day?"))
to_year = int(raw_input("to year?"))
to_month = int(raw_input("to month?"))
to_day = int(raw_input("to day?"))
print_folder()
Nån som kan förklara vad detta beror på?
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:19
av Galgalid
Kod: Markera allt
#!/usr/bin/env python
#Writes files with date
import os
def print_folder():
s = "-"
from_year = int(raw_input("from year?"))
from_month = int(raw_input("from month?"))
from_day = int(raw_input("from day?"))
to_year = int(raw_input("to year?"))
to_month = int(raw_input("to month?"))
to_day = int(raw_input("to day?"))
while True:
if to_year + to_month + to_day == to_year + to_month + to_day:
break
os.mkdir(from_year, s, from_month, s, from_day)
from_day = from_day + 1
if from_month + from_day == 43:
from_year = from_year + 1
if from_day == 31:
from_day = 1
from_month = from_month + 1
if from_month == 13:
from_month = 1
print_folder()
Prova om det går bättre. Felet jag såg är att du använda variabler i uträkningar(if-staserna) före du hade "skapat dom" dvs gett dom ett värde
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:26
av Galgalid
PS: Istället för int(raw_input()) så kör x = input()
raw_input gör värdet till en sträng
input gör värdet till en integer(heltal)

SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:33
av Iceron
Tack för det snabba svaret, men jag fick "TypeError: mkdir() takes at most 2 arguments (5 given)" så ja måste skippa ner på argumenten på nått klurigt sätt.
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:35
av Smygis
Galgalid skrev:
PS: Istället för int(raw_input()) så kör x = input()
raw_input gör värdet till en sträng
input gör värdet till en integer(heltal)
Kod: Markera allt
>>> print input.__doc__
input([prompt]) -> value
Equivalent to eval(raw_input(prompt)).
>>> print raw_input.__doc__
raw_input([prompt]) -> string
Read a string from standard input. The trailing newline is stripped.
If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
On Unix, GNU readline is used if enabled. The prompt string, if given,
is printed without a trailing newline before reading.
>>>
att skriva int(raw_input()) är att föredra före input(). använder man input() (utan felhantering) så kan man få en hel del roliga resultat.
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:35
av Galgalid
Iceron skrev:
Tack för det snabba svaret, men jag fick "TypeError: mkdir() takes at most 2 arguments (5 given)" så ja måste skippa ner på argumenten på nått klurigt sätt.
Kolla här för mer info om mkdir
http://docs.python.org/lib/os-file-dir.html#l2h-2688
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:36
av Galgalid
Smygis skrev:
Galgalid skrev:
PS: Istället för int(raw_input()) så kör x = input()
raw_input gör värdet till en sträng
input gör värdet till en integer(heltal)
Kod: Markera allt
>>> print input.__doc__
input([prompt]) -> value
Equivalent to eval(raw_input(prompt)).
>>> print raw_input.__doc__
raw_input([prompt]) -> string
Read a string from standard input. The trailing newline is stripped.
If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
On Unix, GNU readline is used if enabled. The prompt string, if given,
is printed without a trailing newline before reading.
>>>
att skriva int(raw_input()) är att föredra före input(). använder man input() (utan felhantering) så kan man få en hel del roliga resultat.
Där ser man..då vet man det

SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:41
av Smygis
Galgalid skrev:
Iceron skrev:
Tack för det snabba svaret, men jag fick "TypeError: mkdir() takes at most 2 arguments (5 given)" så ja måste skippa ner på argumenten på nått klurigt sätt.
Kolla här för mer info om mkdir
http://docs.python.org/lib/os-file-dir.html#l2h-2688
Varför inte bara:
Kod: Markera allt
>>> print os.mkdir.__doc__
mkdir(path [, mode=0777])
Create a directory.
eller help(os.mkdir). En python programmerare är aldrig långt ifrån dokumentationen.
sedan en liten fråga.
Kod: Markera allt
while True:
if to_year + to_month + to_day == to_year + to_month + to_day:
break
wth?
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:44
av Iceron
okej, det gjorde jag.
men kan man göra något liknande det här?
filename = from_year, "-", from_month, "-", from_day
utan att det blir såhär?
(2007, '-', 8, '-', 10)
utan
2007-8-10
för att sedan
os.mkdir(filename)
Smygis skrev:
Kod: Markera allt
while True:
if to_year + to_month + to_day == to_year + to_month + to_day:
break
wth?
Nånting för att bryta när den har gått färdigt

SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:51
av Iceron
Jag har för mig att den bryter sig ur loopen

Men jag kan ju ha fel, vilket inte skulle förvåna mig

SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:53
av Galgalid
Iceron skrev:
Jag har för mig att den bryter sig ur loopen

Men jag kan ju ha fel, vilket inte skulle förvåna mig
Den kollar om variablerna o_year + to_month + to_day är det samma som o_year + to_month + to_day. Om det är det så inträffar break, vilket tar dig ur kontrollen, för att sedan köra på med os.mkdir....om jag nu har rätt
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:57
av Iceron
ah, men jag har hittat ett fel >_<
if to_year + to_month + to_day == to_year + to_month + to_day:
ska vara:
if to_year + to_month + to_day == from_year + from_month + from_day:
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:59
av Galgalid
Iceron skrev:
ah, men jag har hittat ett fel >_<
if to_year + to_month + to_day == to_year + to_month + to_day:
ska vara:
if to_year + to_month + to_day == from_year + from_month + from_day:
xD ser bättre ut nu ^^
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 19:59
av Smygis
Kod: Markera allt
#!/usr/bin/env python
# coding: UTF-8
#Writes files with date
import os
def print_folder():
global from_year
global from_month
global from_day
global to_year
global to_month
global to_day
s = "-"
while True:
if str(from_year) + str(from_month) + str(from_day) == str(to_year) + str(to_month) + str(to_day):
break
os.mkdir(str(from_year) + s + str(from_month) + s + str(from_day))
from_day += 1
if from_month + from_day == 43:
from_year = from_year + 1
if from_day == 31:
from_day = 1
from_month = from_month + 1
if from_month == 13:
from_month = 1
from_year = int(raw_input("from year?"))
from_month = int(raw_input("from month?"))
from_day = int(raw_input("from day?"))
to_year = int(raw_input("to year?"))
to_month = int(raw_input("to month?"))
to_day = int(raw_input("to day?"))
print_folder()
SV: Lite hjälp till en nybörjare (Python os.mkdir)
Postat: 10 aug 2007, 20:17
av Iceron
Tack så mycket Smygis
Och om jag har läst och förstått rätt så gör global att man inte kan ändra en sträng som har global utan global?
Eller har jag fel?