Lite hjälp till en nybörjare (Python os.mkdir)

Här diskuteras programmering och utveckling
Användarvisningsbild
Iceron
Inlägg: 387
Blev medlem: 22 jun 2007, 21:16
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Kontakt:

Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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å?
Stationär: p4@2.4ghz, 512MB DDR,  nvidia 7600gs | Laptop: intel c2d@1.5ghz 1gb DDR2 | Mediacenter: p4@3ghz, 1gb ram, nvidia 6100LE | Server: p3@550mhz, 512mb ram, 420gb hd.
Bild
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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) ;)
Senast redigerad av 1 Galgalid, redigerad totalt 10 gånger.
Användarvisningsbild
Iceron
Inlägg: 387
Blev medlem: 22 jun 2007, 21:16
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Kontakt:

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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.
Stationär: p4@2.4ghz, 512MB DDR,  nvidia 7600gs | Laptop: intel c2d@1.5ghz 1gb DDR2 | Mediacenter: p4@3ghz, 1gb ram, nvidia 6100LE | Server: p3@550mhz, 512mb ram, 420gb hd.
Bild
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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 :)
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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?
Senast redigerad av 1 Smygis, redigerad totalt 10 gånger.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
Iceron
Inlägg: 387
Blev medlem: 22 jun 2007, 21:16
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Kontakt:

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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 ;)
Senast redigerad av 1 Iceron, redigerad totalt 10 gånger.
Stationär: p4@2.4ghz, 512MB DDR,  nvidia 7600gs | Laptop: intel c2d@1.5ghz 1gb DDR2 | Mediacenter: p4@3ghz, 1gb ram, nvidia 6100LE | Server: p3@550mhz, 512mb ram, 420gb hd.
Bild
Användarvisningsbild
Iceron
Inlägg: 387
Blev medlem: 22 jun 2007, 21:16
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Kontakt:

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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
Stationär: p4@2.4ghz, 512MB DDR,  nvidia 7600gs | Laptop: intel c2d@1.5ghz 1gb DDR2 | Mediacenter: p4@3ghz, 1gb ram, nvidia 6100LE | Server: p3@550mhz, 512mb ram, 420gb hd.
Bild
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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
Användarvisningsbild
Iceron
Inlägg: 387
Blev medlem: 22 jun 2007, 21:16
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Kontakt:

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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:
Stationär: p4@2.4ghz, 512MB DDR,  nvidia 7600gs | Laptop: intel c2d@1.5ghz 1gb DDR2 | Mediacenter: p4@3ghz, 1gb ram, nvidia 6100LE | Server: p3@550mhz, 512mb ram, 420gb hd.
Bild
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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 ^^ 
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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()
Senast redigerad av 1 Smygis, redigerad totalt 10 gånger.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
Iceron
Inlägg: 387
Blev medlem: 22 jun 2007, 21:16
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Kontakt:

SV: Lite hjälp till en nybörjare (Python os.mkdir)

Inlägg 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?
Stationär: p4@2.4ghz, 512MB DDR,  nvidia 7600gs | Laptop: intel c2d@1.5ghz 1gb DDR2 | Mediacenter: p4@3ghz, 1gb ram, nvidia 6100LE | Server: p3@550mhz, 512mb ram, 420gb hd.
Bild
Skriv svar

Återgå till "Programmering och webbdesign"