These are chat archives for dbwebb-se/python

6th
Oct 2017
lewenhagen
@lewenhagen
Oct 06 2017 05:39
@fblanke Ett tips är att använda \n som delimiter när du använder split(), så istället för .split(" ") så kan du testa: .split("\n")
limy17
@limy17
Oct 06 2017 09:26
Det första kommandot ska gälla om endast ping är valt. Alt 2 ska gälla endast om ping och silent valts tillsammans. Jag tycker att detta är angivet i koden, men programmet verkar missförstå anvisningen på ngt sätt?
Luoniev
@Luoniev
Oct 06 2017 09:29
Skulle du kunna göra en codeshare så jag kan läsa koden lite enklare?
Allinrep
@pejg12
Oct 06 2017 09:39
@limy17 det är bra att börja med de mest specifika if-raderna överst, så att de matchas först, så byt plats på dem bara.
Allinrep
@pejg12
Oct 06 2017 09:45

@ocpu

Parsa hemsidan och hämta bara ut texten som finns i html-taggen article.

Huruvida det handlar om en eller flera taggar ser ut som en tolkningsfråga. Tolka så att det känns som en lagom utmaning och skriv i redovisningen hur du tänkte så att rättaren vet att du har gjort ett medvetet val.

limy17
@limy17
Oct 06 2017 09:53
@pejg12 Tack! Ska testa det.
Nu fungerade det. :)
Allinrep
@pejg12
Oct 06 2017 10:01
@limy17 det skulle kunna vara lättare att hitta i din kod om du skrev om det på det här sättet:
if unknownargs:
    if args["command"] == "ping":
        if silent:
            requester.pingStatus(unknownargs[0]) # Kör: python3 main.py --silent ping https://dbwebb.se
        else:
            requester.pingIt(unknownargs[0]) # Kör: python3 main.py ping https://dbwebb.se
    elif args["command"] == "get":
        # med mera
nu blev färgerna konstiga i gitter, men koden är det nog inget fel på
limy17
@limy17
Oct 06 2017 10:04
Jag ska försöka skriva den koden för ping och ping silent nu...
Allinrep
@pejg12
Oct 06 2017 10:05
målet är att försöka undvika and och istället lägga varje condition på en egen rad, i nästlade djup istället
limy17
@limy17
Oct 06 2017 10:07
@pejg12 Har skrivit i privat chatt
Daggerby
@Daggerby
Oct 06 2017 11:06
Finns det något bra referensmaterial på svenska gällande argparse? Har gått igenom allt material inkl föreläsning med warehouse. Har läst igenom argparse på python.org. Kommer inte frammåt alls. Måste ha missat något väsentligt. Har börjat om från början på både cli_parse och main, men får inte till några framsteg. Några tips på hur man kan få det att lossna?
Allinrep
@pejg12
Oct 06 2017 11:33
Utöver det som finns i övningar och uppgifter så finns det några frågor och svar på forumet också, några som är länkade i FAQ-tråden för python.
Hur du kan få det att lossna beror på vad det är som saknas, det är svårt för dig att förmedla och oss att gissa oss till. Det är många olika bitar som ska sättas ihop och olika människor har svårt för olika bitar.
Steg ett kan vara att gå tillbaka till argparse-övningen och skriva lite olika kommandon. Kan du flytta ut resultatet av --silent till en egen variabel?
Daggerby
@Daggerby
Oct 06 2017 11:41
Har inte börjat med silent och verbose än, då jag inte får igång funktionen från analyzer. När jag väl får igång det med den valfria text-filen tänkte jag börja med dem. Det är svårt och ställa en vettig fråga, då jag inte riktigt förstår vad som blir fel.
File "main.py", line 24, in <module>
if args["command"] == "lines" and unknown_args:
TypeError: string indices must be integers
Jag skriver in python3 main.py lines phil.txt
Sen laborerar jag lite och får:
usage: main.py [-h] [-v | -s] [-V]
fname {lines,words,letter,letter_frequency,words_frequency,all}
...
main.py: error: argument fname: can't open 'lines': [Errno 2] No such file or directory: 'lines'
Daggerby
@Daggerby
Oct 06 2017 11:46
Som jag förstår det så försöker fname(alltså filen) öppna funktionen lines, men misslyckas med detta. Dock borde det väl vara lines som öppnar filen?
Allinrep
@pejg12
Oct 06 2017 12:18
if args["command"] == "lines" and unknown_args:
TypeError: string indices must be integers
Det här felet uppstår på grund av att argsi just det läget innehåller en textsträng, men du förväntar dig en dictionary. hur gick det till? någonstans skriver du över args med ett nytt värde, eller så har du ändrat på vad cli_parser returnerar.
felet med fname handlar om att den försöker öppna filnamnet lines, men den filen existerar inte. du har tolkat resultatet av cli_parser snett och råkat skicka kommandot istället för filnamnet.
du behöver få koll på vad som egentligen returneras av cli_parser. inne i main så kör du en funktion från cli_parser och lagrar resultatet i två olika variabler. printa ut resultatet av de variablerna och studera vad de innehåller. vad är det för typ? vilka nycklar finns? vilka värden finns? det är där du ska börja, du måste få koll på den delen.
limy17
@limy17
Oct 06 2017 13:32

Hej! Jag har ett par frågor gällande krav 8 och 9 i kmom06:
"Krav 8. Det ska gå att analysera texten i filen, som föregående krav resulterar i, med samma kommandon som används i kmom05, analysera text och ord. Om man anger ett option --output=<file> så skall utskriften ske till en fil, istället för skärmen. Krav 9. Resultatet från textanalysen ska presenteras i JSON-format."

"Det ska gå att analysera texten i filen (...)"
Den som article sparats i?

"Om man anger ett option --output=<file> så skall utskriften ske till en fil, istället för skärmen."
Till samma fil som article sparats i eller en annan?

"Resultatet från textanalysen ska presenteras i JSON-format."
Vad krävs för att det ska vara uppfyllt?

lewenhagen
@lewenhagen
Oct 06 2017 13:41
En uppdatering av kursmaterialet och förtydliganden av uppgifterna i kmom05 och 06: https://dbwebb.se/forum/viewtopic.php?f=30&t=6910#p56138
limy17
@limy17
Oct 06 2017 13:47
@lewenhagen Jag har börjat med en lösning för krav 8 i kmom06, men får inte ngt resultat i terminalen:
https://codeshare.io/GqLWJR
@lewenhagen Berörd del i main: https://codeshare.io/2WW93E
lewenhagen
@lewenhagen
Oct 06 2017 13:50
@limy17 har du lagt till print() på olika ställen för att se var det slutar fungera?
@limy17 vad är output_to_file i sammanhanget?
limy17
@limy17
Oct 06 2017 13:53
@lewenhagen Jag antar att det är i main, då originalprogrammet för count_lines() fungerade tidigare, men det fungerar inte heller, längre. Nu har jag lagt till funktionen count_lines_save(), och ändrat i if-satsen i main.
output_to_file.py är sidan som sparar saker till fil.
lewenhagen
@lewenhagen
Oct 06 2017 13:54
aha, och den importeras?
limy17
@limy17
Oct 06 2017 13:54
Yes
lewenhagen
@lewenhagen
Oct 06 2017 13:55
@limy17 jag skriver lite i codesharen istället
limy17
@limy17
Oct 06 2017 13:56
Tackar
Jag får inget svar alls
lewenhagen
@lewenhagen
Oct 06 2017 14:00
från någon print?
limy17
@limy17
Oct 06 2017 14:00
@lewenhagen Ingen alls
Lindas-MacBook-Pro:analyzer2 linda$ #python3 main.py lines json.jsonkmom06 genom: python3 main.py --output lines phil.txt
Lindas-MacBook-Pro:analyzer2 linda$
lewenhagen
@lewenhagen
Oct 06 2017 14:01
gör print(args) och print(unknownargs) direkt efter de skapats
då ser du vad de innehåller och om du letar på rätt ställen i dem i din if-sats
limy17
@limy17
Oct 06 2017 14:02
Lindas-MacBook-Pro:analyzer2 linda$ python3 main.py
{'verbose': False, 'silent': False, 'output': False, 'command': None}
[]
No match
lewenhagen
@lewenhagen
Oct 06 2017 14:03
Då verkar det vara något tokigt med din parser...
limy17
@limy17
Oct 06 2017 14:06
@lewenhagen Men till exempel detta fungerar ju? python3 main.py --silent ping https://dbwebb.se
lewenhagen
@lewenhagen
Oct 06 2017 14:06
hur ser din parser ut?
limy17
@limy17
Oct 06 2017 14:07
@lewenhagen cli_parser.py ser ut såhär: https://codeshare.io/21D3Jj
Edward Nilsson
@Enilsson9
Oct 06 2017 14:10
Såg att analyzer2 uppgiften blev uppdaterad
$ python3 main.py --silent lines phil.txt.... Måste det vara verkligen på JSON form? jag gjorde så att --silent skulle ge den minsta värde. I detta fallet bara antalet rader.
Jag visar JSON formen utan --silent. Är det ok eller måste det fixas?
lewenhagen
@lewenhagen
Oct 06 2017 14:14
@limy17 det är lite svårt utan att köra koden. Ett tips är att backa lite och ta det stegvis. Börja med att få till att styra "output":True/False med hjälp av --output. Sedan ta det steg för steg framåt.
@Enilsson9 Det ska vara ok.
limy17
@limy17
Oct 06 2017 14:17
@lewenhagen Tycker det är lite underligt bara, då det andra valet som innehåller --output fungerar?
Edward Nilsson
@Enilsson9
Oct 06 2017 14:17
@lewenhagen Vet du varför får vi en sorts unicode när vi kör word_frequency i json formen? Måste det också fixas?
limy17
@limy17
Oct 06 2017 14:20
@lewenhagen Nu fungerade allt bara plötsligt. Har inte ändrat ngt... Kanske var en uppdatering som inte hängde med tidigare? :/
limy17
@limy17
Oct 06 2017 14:41
@Enilsson9 Hur tolkade du detta med att resultatet ska "presenteras i JSON-format"?
Ska man bara visa en utskrift från en json-fil?
Edward Nilsson
@Enilsson9
Oct 06 2017 14:42
@limy17 Jag gjorde exakt som Andreas gjorde här https://www.youtube.com/watch?v=Wq6cpkPJDaU
Så du visar resultatet i JSON-format i skärmen om inte --output anges
--output=<filename>
Jag skrev min resultat i JSON form med hjälp av modulen json och dumps(). Inget annat,
limy17
@limy17
Oct 06 2017 15:04
@Enilsson9 Såhär typ eller?
def saveToFile2(pb):
json.dumps(pb, indent=4)
limy17
@limy17
Oct 06 2017 15:16

Har fått en lite väl krånglig error för att försöka lösa på egen hand känner jag?
"Lindas-MacBook-Pro:analyzer2 linda$ python3 main.py --output all phil.txt

All options!

Count lines:
count Lines Save
FileSum:

<_io.TextIOWrapper name='phil.txt' mode='r' encoding='UTF-8'>
In file:
Traceback (most recent call last):
File "main.py", line 56, in <module>
main()
File "main.py", line 42, in main
analyzer.allOpts2(unknownargs[0])
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/analyzer.py", line 116, in allOpts2
count_lines_save(file_path)
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/analyzer.py", line 25, in count_lines_save
print(output_to_file.readFile2())
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/output_to_file.py", line 16, in readFile2
hist = json.load(open("save-res.json", "r"))
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/init.py", line 299, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/init.py", line 354, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)"

Andreas
@freddyph
Oct 06 2017 15:28

Försöker få till verbose och silent enligt följande:

if options["known_args"]["command"] == "lines":
        if "verbose":
            print("The number of lines is: " +str(analyzer.lines(options["known_args"]["file"])))
        elif "silent":
            print(analyzer.lines(options["known_args"]["file"]))

Vad missar jag?

när jag testar får jag resultatet: "The number of lines is: 19" på både -s och -v
limy17
@limy17
Oct 06 2017 15:33
@freddyph Så här löste jag det för kmom06:
if args["command"] == "lines":
if output:
            ```analyzer.count_lines_save(unknownargs[0])```
        ```else:```
            ```analyzer.count_lines(unknownargs[0])```
Och ovanför if-satserna: args, unknownargs = cli_parser.parse_options()
output = args['output']
Andreas
@freddyph
Oct 06 2017 15:42
@limy17 tackar! tror jag löste det nu :)
Edward Nilsson
@Enilsson9
Oct 06 2017 15:48
@limy17 Japp. Själv så sparade jag allt i variabler. T.ex: json_lines = json.dumps({"nr_of_lines: " : num_lines}, indent=4)