• 1
  • 2
2011-06-03, 11:36
  #1
Medlem
Har ett skript som jag ibland hämtar info om aktier. (Vill inte säga vart från, då jag inte har frågat om lov )

Det är speciella datum som jag ändrar med find and replace i en editor, det funkar, men är lite dumt sätt. Med en loop kan man ändra datumen, men nu är det ju datum i url:en också och då slår det slint i skallen om hur man ska göra..

Jag vill kunna ange tex datum för en viss vecka och så ersätts 20110523 med ett nytt datum på 4 ställen i skriptet nedanför, sedan hämtar skriptet aktieinformationen för det datumet, sedan ersätts datumet med nytt och information för datumet hämtas.

Kod:
#_______________NOKIA_________________
#Sleep a while to make it look less computerized
random.randint(2,4# Sleep for a while 
time.sleep(i)
print 
"slept for" ,(i), "seconds"   # Prints how long it slept
#_____Get trades
os.chdir("E:NOKIA/Trades"#Create the file here
sock urllib.urlopen("http://www.xxx.xxx/trade.php?stock=NOKIA.ST&date=20110523")
data sock.read()
sock.close()
logfile =open(("NOKIA_Trades_20110523.txt"), 'w'#Creates a txt file named as the date
logfile.write(data#writes 'data' to above file
logfile.close()
print 
"NOKIA.ST trades OK"
random.randint(2,5# Sleep for a while
time.sleep(i)
print 
"slept for" ,(i), "seconds" # Prints how long it slept

#_____Get order depth
os.chdir("E:NOKIA/Depth"#Create the file here
sock urllib.urlopen("http://www.xxx.xxx/pos.php?stock=NOKIA.ST&date=20110523")
data sock.read()
sock.close()
logfile =open(("NOKIA_depth_20110523.txt"), 'w'#Creates a txt file named with todays date
logfile.write(data#writes 'data' to above file
logfile.close()
print 
"NOKIA.ST depth ok" 

Sen vill jag kunna ändra NOKIA.ST mot något annat. Med det tar vi efteråt.
__________________
Senast redigerad av brr 2011-06-03 kl. 11:43.
Citera
2011-06-05, 08:15
  #2
Medlem
Du vet att du kan slå ihop strängar, eller?

Ett väldigt enkelt sätt är då att ha datumet som sträng i en variabel:

Kod:
d = "20110523"

Sen använder du variabeln d i ditt program (här visar jag några väsentliga rader):

Kod:
sock = urllib.urlopen("http://www.xxx.xxx/trade.php?stock=NOKIA.ST&date=" + d)

Kod:
logfile =open(("NOKIA_depth_" + d + ".txt"), 'w') #Creates a txt file named with todays date
Citera
2011-06-06, 23:37
  #3
Medlem
Var det så enkelt! Jag hade gjort det lite för svårt för mig. Tack!

Klämde också dit aktierna i en lista
Kod:
Stocks = ["aktie1",aktie2]
for 
s in Stocks:
    
sock urllib.urlopen("http://www.xxx.xxx/trade.php?stock="+s+".ST&date=" d)
och låter en kodnsutt ta dom i tur och ordning. Tidigare var det en kodsnutt per aktie. Det blev inte så många rader kod kvar
Citera
2011-06-07, 05:13
  #4
Medlem
Trevligt att reducera kod, eller hur?
Citera
2011-06-07, 14:13
  #5
Medlem
Ja, väldigt roligt!

Har en till sak som inte går som jag vill. Tänkte att den skulle skapa en mapp med aktiens namn och 2 undermappar. Det går bra för aktie1, men sedan skapas mappen för aktie2 i aktie1s depth-mapp. Varför?
Man borde kunna skapa båda undermapparna i första os.mkdirs-raden tycker jag.

Kod:
Stocks = ["aktie1","aktie2","aktie3"]

for 
s in Stocks:

#Skapa mappar
    
if not os.path.isdir(s): 
        
os.makedirs(s+"/Trades")#skapar en Trades-mapp åt instrumentet
        
os.makedirs(s+"/Depth")#skapar en Depth-mapp åt instrumentet
 #Get trades
        
os.chdir("aktie1/Trades"#Create the file here 
Citera
2011-06-07, 14:42
  #6
Medlem
Jag antar att du inte har visat helt loopen där... Har du en os.chdir som tar dig tillbaka till katalogen du ska skapa "aktie1" osv under? Annars står du ju där senaste os.chdir placerade dig...
Citera
2011-06-07, 15:23
  #7
Medlem
Jag har provat att lägga in os.chdir("E:/Stockinfo") efter sista mkdirs, men det blir samma resultat.
Kod:
Stocks = ["aktie1","aktie2","aktie3"

for 
s in Stocks

#Skapa mappar 
    
if not os.path.isdir(s):  
        
os.makedirs(s+"/Trades")#skapar en Trades-mapp åt instrumentet 
        
os.makedirs(s+"/Depth")#skapar en Depth-mapp åt instrumentet 
        
os.chdir("E:/Stockinfo"#Tillbaka till huvudmappen.
 #Get trades 
        
os.chdir("E:/Stockinfo/"+s+"/Trades"# Här stannar den för andra aktien. 
        
sock urllib.urlopen("http://www.xxx.xxx/paper="+s+"&date="+d
Mapparna till aktie1 skapas och info hämtas och sparas, men sen skapas mappen aktie2 på fel ställe och då får jag detta "WindowsError: [Error 3] The system cannot find the path specified: 'E:/Stockinfo/aktie2/Trades'"

Edit: 2 os.chdir efter varandra kan inte göra någon nytta. Eller vart skulle den vara? Koden är oförändrad förut att jag la in kollen om mappen redan fanns och sedan de 2 raderna som skapar mapparna. Sedan fortsätter koden som vanligt med Get trades.
__________________
Senast redigerad av brr 2011-06-07 kl. 16:14.
Citera
2011-06-07, 17:29
  #8
Medlem
OK, får visst ta det här stegvis, först händer följande (lite utbenat):

Kod:
# At this point, s = "aktie1"

        os.makedirs(s+"/Trades")#skapar en Trades-mapp åt instrumentet  
        os.makedirs(s+"/Depth")#skapar en Depth-mapp åt instrumentet  
        os.chdir("E:/Stockinfo") #Tillbaka till huvudmappen. 
 #Get trades  
        os.chdir("E:/Stockinfo/"+s+"/Trades") # Här stannar den för andra aktien.  
        sock = urllib.urlopen("http://www.xxx.xxx/paper="+s+"&date="+d)

Vid det här laget står du alltså i E:/Stockinfo/aktie1/Trades, och nästa iteration i loopen blir följande:

Kod:
# At this point, s = "aktie2"

        os.makedirs(s+"/Trades")#skapar en Trades-mapp åt instrumentet 

Var tror du att du står när os.makedirs utförs?
Citera
2011-06-07, 21:40
  #9
Medlem
Det verkar som att jag står i E:/Stockinfo/aktie1/Depth, då den skapar mappen aktie2 med dess undermappar i mappen jag står i. Men borde inte 'os.chdir("E:/Stockinfo/"+s+"/Trades") rad 3' ta mig därifrån?

Uppenbarligen förstår jag inte hur koden exekveras. Jag vill gärna tro att raderna 1-3 tas i tur och ordning.
Kod:
os.makedirs(s+"/Trades")# rad 1 skapar en Trades-mapp åt instrumentet  
        os.makedirs(s+"/Depth")# rad 2 skapar en Depth-mapp åt instrumentet  
 #Get trades  
        os.chdir("E:/Stockinfo/"+s+"/Trades") # rad 3 fyller på data i filen som sparas i mappen som skapades i rad 1.  
__________________
Senast redigerad av brr 2011-06-07 kl. 21:41. Anledning: typo
Citera
2011-06-08, 00:17
  #10
Medlem
Eh...

alltså, om vi tar och "rullar ut" loopen så kanske det blir klarare:

Kod:
    s = "aktie1"
#Skapa mappar  
    if not os.path.isdir(s):   
        os.makedirs(s+"/Trades")#skapar en Trades-mapp åt instrumentet  
        os.makedirs(s+"/Depth")#skapar en Depth-mapp åt instrumentet  
        os.chdir("E:/Stockinfo") #Tillbaka till huvudmappen. 
 #Get trades  
        os.chdir("E:/Stockinfo/"+s+"/Trades") # Här stannar den för andra aktien.  
        sock = urllib.urlopen("http://www.xxx.xxx/paper="+s+"&date="+d)  

    s = "aktie2"
#Skapa mappar  
    if not os.path.isdir(s):   
        os.makedirs(s+"/Trades")#skapar en Trades-mapp åt instrumentet  
        os.makedirs(s+"/Depth")#skapar en Depth-mapp åt instrumentet  
        os.chdir("E:/Stockinfo") #Tillbaka till huvudmappen. 
 #Get trades  
        os.chdir("E:/Stockinfo/"+s+"/Trades") # Här stannar den för andra aktien.  
        sock = urllib.urlopen("http://www.xxx.xxx/paper="+s+"&date="+d)  

    s = "aktie3"
#Skapa mappar  
    if not os.path.isdir(s):   
        os.makedirs(s+"/Trades")#skapar en Trades-mapp åt instrumentet  
        os.makedirs(s+"/Depth")#skapar en Depth-mapp åt instrumentet  
        os.chdir("E:/Stockinfo") #Tillbaka till huvudmappen. 
 #Get trades  
        os.chdir("E:/Stockinfo/"+s+"/Trades") # Här stannar den för andra aktien.  
        sock = urllib.urlopen("http://www.xxx.xxx/paper="+s+"&date="+d)

Förstår du då bättre vad som är problemet?
Citera
2011-06-08, 01:11
  #11
Medlem
Alltså, det var mycket roligare när jag frågade och du svarade

Den här
Kod:
os.chdir("E:/Stockinfo")
ska vara före man börjar skapa mappar, visst?
Citera
2011-06-08, 01:24
  #12
Medlem
Citat:
Ursprungligen postat av brr
Den här
Kod:
os.chdir("E:/Stockinfo")
ska vara före man börjar skapa mappar, visst?
Om du testar får du svar
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in