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 :P Men jag kan ju ha fel, vilket inte skulle förvåna mig  ;D

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 :P Men jag kan ju ha fel, vilket inte skulle förvåna mig  ;D
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?