These are chat archives for dbwebb-se/python

25th
Oct 2016
Christinefred
@Christinefred
Oct 25 2016 09:07
Så url är inte en webbsida? Och räkna taggar det måste väl vara en webbsida?
DEt är uppgift 9 det gäller.
Christinefred
@Christinefred
Oct 25 2016 09:12
så den här koden är fel för det här kommandot: if JASON == True:
    #if VERBOSE:
    jsonfile = open(INPUT, "r")
    jsonobject = json.load(jsonfile)

    for item in jsonobject["report"]:
        print("{answer}\n".format(answer=item["answer"]))
        print("{answer2}\n".format(answer2=item["answer2"]))
        print("{answer3}\n".format(answer3=item["answer3"]))
        print("{answer4}\n".format(answer4=item["answer4"]))
    jsonfile.close()
Finns det ett hangout idag jag känner mig helt ute och cyklar.
danijoha
@danijoha
Oct 25 2016 09:22
@Christinefred Input-filen som ska läsas in ska vara en HTML-fil, inte JSON. Och jo, url ska gå till en webbsida (med HTML innehåll som ska analyseras av seo funktionen). I båda fallen är det HTML som ska analyseras vilket gör att du kan (och bör) ha gemensam kod för det.
Christinefred
@Christinefred
Oct 25 2016 10:28
Så det ska skrivas ut webbsidan s analyserade innehåll och en utskrift från rapporten på samma gång.
Den här uppgiften verkar låsa mitt huvud, vet inte varför.
Allinrep
@pejg12
Oct 25 2016 11:03
@Christinefred Jag kan hjälpa dig i hangout: https://hangouts.google.com/call/3eadsoz4wnecjaazh4foqoz37ee
Christinefred
@Christinefred
Oct 25 2016 11:09
Det är så dumt jag måste gå iväg nu men senare om några timmar eller imorgon. Dumt för mig. Tack
Allinrep
@pejg12
Oct 25 2016 11:10
Hoppas någon annan kan hjälpa senare då, jag är inte tillgänglig förrän torsdag morgon igen.
Webbsidans innehåll ska inte skrivas ut, bara den uträknade rapporten. Oavsett om man anger url eller file så är det html-kod som ska analyseras. Med hjälp av beautifulsoup kan du räkna hur många <a>-taggar som finns i html-koden. Resultatet av uträkningen är det som ska presenteras i terminalen.
Allinrep
@pejg12
Oct 25 2016 11:20
@Christinefred Så här ser det ut i terminalen när jag kör seo-kommandot i min marvin:
https://gist.github.com/pejg12/6fc3572f18816f3c34cd681cec9da12e
(Hela gisten är 41 rader, klicka på länken om du inte kan se allt på Gitter)
Luoniev
@Luoniev
Oct 25 2016 11:36
Jag har ett problem med att få min ping att fungera. Jag har börjar på Kmom06 nu (Vet det är riktigt sent) men jag har fått till menyn att funka (-h, -v, --version o.s.v.) Nu så ska man ha så man kan pinga en server. Då gjorde jag att man kan bara skriva "ping" efter namnet som "marvin-cli.py ping <url>", dock när jag skriver såhär kommer jag inte in i metoden. Jag gissade på att det kanske måste vara ett "-" innan men det ska det ju inte vara, så jag sitter fast eftersom detta är riktigt svårt att hitta ute på nätet.
Allinrep
@pejg12
Oct 25 2016 11:36
@Luoniev Jag tror att den här videon hjälper dig framåt: https://www.youtube.com/watch?v=hCrqrB9_YE0
Luoniev
@Luoniev
Oct 25 2016 11:38
Jag har sett denna men här skriver han --silent innan han skriver ping, det ska man inte behöva enligt exemplen på uppgifterna, senare har jag inte fått min silent eller verbose att funka då jag har jätte svårt hitta det på nätet, och ingen video här förklara --silent eller --verbose
Allinrep
@pejg12
Oct 25 2016 11:42
Om du använder print(opts) och print(args) så borde du få en ledtråd till vad som händer när du inte har med --silent.
print("det här är opts: ")
print(opts)
Om du printar ut en textsträng ovanför kan det bli lättare att se vad som innehåller vad.
Luoniev
@Luoniev
Oct 25 2016 11:47
$ python3 marvin-cli.py --silent ping
[('--silent', 'ping')]
[]
Jag tror att ping sätts inte som ett argument+
Allinrep
@pejg12
Oct 25 2016 11:47
aha, där var en bra ledtråd. ping hamnar som ett argument till silent
men silent ska inte ha några argument
det har att göra med att du kanske har skrivit s: eller silent= i koden som talar om vilka options som ska finnas
Luoniev
@Luoniev
Oct 25 2016 11:49
Jag har gjort det, eftersom för att någonting silent trodde jag att man måste t.ex. gå in i silent, och sedan använda argumentet för att hoppa in i en metod.
Allinrep
@pejg12
Oct 25 2016 11:50
nej, silent är ingen egen metod, silent ska påverka hur andra metoder väljer att skriva ut informatoin
Luoniev
@Luoniev
Oct 25 2016 11:50
Jag det föstår jag, dock inte hur ännu..
Om jag tänker rätt nu med detta här som svar
$ python3 marvin-cli.py --silent ping
[('--silent', '')]
['ping']
Allinrep
@pejg12
Oct 25 2016 11:52
det ser rätt ut, ja
Luoniev
@Luoniev
Oct 25 2016 11:52
Så kommer jag kolla med args ifall ping finns med, och senare kolla opts ifall jag har valt silent eller verbose för att se hur mycket text som skrivs ut?
Allinrep
@pejg12
Oct 25 2016 11:54
För att få ordning på silent och verbose, tänk dig att det finns tre olika nivåer av pratsamhet. Antingen kan programmet babbla på ordentligt och berätta varenda liten detalj det sysslar med (verbose), eller så kan det bara berätta det som är intressant (normalt), eller så är det funktionellt och berättar bara det absolut nödvändigaste (silent). Fundera på hur varje metod skulle kunna presentera mer eller mindre information, och använd dig av if-satser för att få rätt nivå av pratsamhet.
En lösning för silent och verbose är att använda sig av nyckelordet global.
danijoha
@danijoha
Oct 25 2016 11:56
@Luoniev Om --silent är valt så sätt då t ex en global variabel till True eller False för att komma ihåg det. Sedan kan du testa på den variabeln när du vill senare, när det är dags att skriva ut något.
Luoniev
@Luoniev
Oct 25 2016 11:56
För att få fram den normala pratsamheten så skulle jag behöve skriva
"$ python3 margin-cli.py ping" ?
Tack för tipset @danijoha
Allinrep
@pejg12
Oct 25 2016 11:56
precis, det var så jag menade med normalt
Luoniev
@Luoniev
Oct 25 2016 12:02
Slutligen så jag har bara fråga om ett tips, eftersom ping inte sätts in i opts, så kan jag inte skriva t.ex. "if opt in ("ping"):" eftersom den läggs i args, dock så funkar inte det med "if arg in ("ping")" eller "if "ping" in args"
Allinrep
@pejg12
Oct 25 2016 12:04
arg och args är inte samma variabel.
Luoniev
@Luoniev
Oct 25 2016 12:04
Ops stavfel
Allinrep
@pejg12
Oct 25 2016 12:05
du kan prova olika varianter av is, in eller ==, och prova args eller args[0]
Luoniev
@Luoniev
Oct 25 2016 12:12
Har prövat många olika sätt, kommer inte in ping...
Allinrep
@pejg12
Oct 25 2016 12:14
på raden precis ovanför din if-sats, använd print för att se vad det är du egentligen testar mot
Luoniev
@Luoniev
Oct 25 2016 12:16
Okej, om jag vara skriver ping så sätts ingenting in i 'args' eller 'opts'
Om jag skriver --silent ping så kommer det in
Allinrep
@pejg12
Oct 25 2016 12:16
$ python3 marvin-cli.py ping http://dbwebb.se
skriver du över args någonstans då kanske?
Luoniev
@Luoniev
Oct 25 2016 12:18
Nej, det ändra jag har är print överallt för att se vart jag kommer in, sålänge kommer ping in men jag måste skriva antingen -h, -v, -s, --verbose innan, men när ping ska in självt eller med en url efteråt så kommer det inte in i args eller opts
Allinrep
@pejg12
Oct 25 2016 12:19
det ska hamna i args även om opts är tom
vill du att jag ska kolla på din kod? du kan lägga in den i http://codeshare.io
Luoniev
@Luoniev
Oct 25 2016 12:19
try: opts, args = getopt.getopt(sys.argv[1:], "v:h:s:verbose:ping", ["version", "help", "verbose", "silent", "ping"]) except getopt.GetoptError: usage() sys.exit(1)
Okej jag gör det
Jag har även satt ping här för att testa en gång ^^
Allinrep
@pejg12
Oct 25 2016 12:26
det kan vara "v:h:s:verbose:ping" som gör att det inte fungerar. den är menad att bara innehålla short options, men du har med long options också. och kolon betyder att bokstaven till vänster kräver ett argument, men ingen av dem ska kräva något argument i det här läget.
Luoniev
@Luoniev
Oct 25 2016 12:27
Jag tog bort det men glömde från codeshare, det funkar fortfarande inte. Jag testade bara en gång ifall det kunde vara det av en ren slump
Allinrep
@pejg12
Oct 25 2016 12:28
det kan också vara elif "ping" is args[0]: som gör att det inte fungerar. den ligger inuti loopen för opts, men den borde ligga utanför.
Luoniev
@Luoniev
Oct 25 2016 12:30
$ python3 marvin-cli.py ping http://dbwebb.se [] ['ping', 'http://dbwebb.se']
Såklart var det att den låg i for-loopen.......
Christofer Jungberg
@Barelydead
Oct 25 2016 15:34
Jag får i vissa lägen upp detta felmeddelande i mitt python projekt: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte
Någon som vet vad det betyder?
Viktor Bengtsson
@Zero2k
Oct 25 2016 16:02
Har kört fast på upg 2.4 (Lab 4) se min kod här: https://codeshare.io/EHEuo. Har lyckats får fram det resultatet som jag vill ha, men det skrivs ut felaktigt. Har testat med fler variabler där jag formaterar strägen med .strip("'')(") och .replace(" ", "") och det fungera nästan. Till exempel så har mitt bästa resultat blivit: "frog, 'fire', 4.77" men eftersom .strip bara gör ändringar i början och slutet av stängen så kan jag inte bli av med '' runt 'fire'. Tänker jag helt fel och gör jag det onödigt komplicerat?
Mikael Roos
@mosbth
Oct 25 2016 16:32
@Barelydead kanske om du trycker backspace på ett åäö i terminalen på cygwin? annars brukar man kunna återskapa felet, det är det som behövs för att felsöka
Mikael Roos
@mosbth
Oct 25 2016 16:40
@Zero2k kika: http://stackoverflow.com/questions/19641579/python-convert-tuple-to-string och den andra kommentaren i det accepterade svaret
det är en variant, men myTuple[0] + "," + ... hade säkert funkat också...
danijoha
@danijoha
Oct 25 2016 16:49
@Zero2k Kollade lite på din codeshare. Du ska nog skicka in en tupel av strängar till join-uttrycket, inte en sträng. men eftersom det inte bara är strängar i tupeln kanske man hellre kan använda en format-sträng "{},{},{}" och med tupeln som argument till format?
Viktor Bengtsson
@Zero2k
Oct 25 2016 19:21
@mosbth @danijoha Ska kolla testa lite mer imorgon när jag har tillgång till koden igen, men nu efter att ha testat i en online IDE så kanske jag har löst det med
myString = ','.join(map(str, myTuple[0:3]))
Tack för hjälpen
danijoha
@danijoha
Oct 25 2016 19:26
@Zero2k Jo, det där ser ut att funka bra. Den gör en ju först sekvens där alla element är strängar och sedan join på denna till en kommaseparerad sträng. :+1: