These are chat archives for dbwebb-se/python

8th
Oct 2017
Allinrep
@pejg12
Oct 08 2017 08:43
@qara17 du kan använda dig av split och join för att konvertera mellan sträng och lista. om du hellre vill spara listan precis som den är så är det JSON du är ute efter, det finns en json-modul till python (import json) med dokumentation i pythonmanualen.
LightsOutBthh
@LightsOutBthh
Oct 08 2017 11:50
Så jag får ett attribute fel när jag försöker använda get_text() från bs4. Kör jag utan get txt får jag allt på sidan html kod / text. Men får attribute fel när jag skriver print(opts.find("article").get_text() Skriver jag h2 istället för article så skriver den ut html kod / text utan något attribute error.
Brian Welch
@brian-welch
Oct 08 2017 11:51
Jag har importerat urllib i en python3 fil, (import urllib). Och jag provar koden: html = urllib.urlopen(url_variable).read(). Jag får här för felmeddelande: AttributeError: module 'urllib' has no attribute 'urlopen'
missade jag ett steg?
Brian Welch
@brian-welch
Oct 08 2017 12:00
Jag kan hitta def urlopen funktion i request.py i modulen's mapp
min texteditor ger mig en syntax fel i request.py filen - i def urlopen funtionen: `
limy17
@limy17
Oct 08 2017 12:02
Hej,
Jag håller på att försöka lösa kravet (kmom06) om --output=<file>, men hittar inget exempel i kursmaterialet om detta?
Bara ett exempel på hur man kör ett sådant kommando via terminalen.
Joris Bomert
@jorisdebom
Oct 08 2017 12:03
jag har också svårt med denna krav
Brian Welch
@brian-welch
Oct 08 2017 12:04
@limy17 @jorisdebom upplev ni nån konstighet med urllib.urlopen()?
Joris Bomert
@jorisdebom
Oct 08 2017 12:04
main.py: error: argument -o/--output: ignored explicit argument ''
limy17
@limy17
Oct 08 2017 12:05
Behöver man ändra hur argumentet till funktioner ser ut för att få detta att fungera? Tidigare hade jag bara if output.
Joris Bomert
@jorisdebom
Oct 08 2017 12:05
jag har inte testat med urllib
limy17
@limy17
Oct 08 2017 12:06
Jag använder argparse
Brian Welch
@brian-welch
Oct 08 2017 12:07
gotcha
Joris Bomert
@jorisdebom
Oct 08 2017 12:08
jag lägger till --output i optional arguments, men det verkar bli konstigt så fort man försöker skriva --output=test.txt (eller någon annan fil)
har också försökt med mellanrum men gör ingen skillnad, den känner inte igen unknown_argument , bara url-en blir en unknown argument
AndreasArne
@AndreasArne
Oct 08 2017 12:13
@limy17 @jorisdebom har någon av er lite kod ni kan visa, av argparse för hur ni löser det?
limy17
@limy17
Oct 08 2017 12:13
Tror --output kan ligga som ett sånt här? parser.add_argument
det är så jag lägger in --output
Brian Welch
@brian-welch
Oct 08 2017 12:15
Om nån bryr sig och har samma problem: tydligen måste man också importera sub filer som request.py för att får funktionen urlopen()
limy17
@limy17
Oct 08 2017 12:15
Men hur lägger man till en optional fil?
Jag testade detta, men fick bara No match som svar:
"-o",
"--output",
nargs="?",
type=argparse.FileType("r"),
 default="phil.txt",
  help="output text-file"
   )
AndreasArne
@AndreasArne
Oct 08 2017 12:16
@jorisdebom du vill inte ha action="store=true", då kommer output bara få värden True eller False
limy17
@limy17
Oct 08 2017 12:17
@AndreasArne Hur får man --output=fil att fungera?
AndreasArne
@AndreasArne
Oct 08 2017 12:17
@limy17 har inte sett din lösning med type=...
testa ta bort type=.. och lägg till dest="output"
och ta bort nargs också tror jag. för vi vill inte att det ska gå att skicka med --output utan ett filnamn
och nargs=? betyder att vi godkänner 0 eller 1 argument (filnamn) med --output
limy17
@limy17
Oct 08 2017 12:20

Jag får fortfarande No match:

   "-o",
    "--output",
    dest="output",
    default="phil.txt",
    help="output text-file"
    )

Behöver jag ändra ngt annat, som argument till funktion?

AndreasArne
@AndreasArne
Oct 08 2017 12:21
@limy17 kan du visa felmeddelandet
limy17
@limy17
Oct 08 2017 12:21
@AndreasArne Lindas-MacBook-Pro:analyzer2 linda$ python3 main.py --output=phil.txt letter_frequency
No match
AndreasArne
@AndreasArne
Oct 08 2017 12:22
@limy17 gör du print("No match") eller är det något programmet skriver ut av sig själv?
limy17
@limy17
Oct 08 2017 12:23
Det har jag satt som utskrift om följande inte fungerar:
if args["command"] == "letter_frequency": if output: analyzer.letter_frequency2(unknownargs[0])
Högst upp i main-funktion står detta:
```args, unknownargs = cli_parser.parse_options()
output = args['output']
silent = args['silent']```
Jag kan ju tillägga att det fungerade innan jag ändrade --output, och körde:
python3 main.py --output letter_frequency phil.txt
AndreasArne
@AndreasArne
Oct 08 2017 12:27
--output=<filnamn> betyder att du vill göra utskrifter till <filnamn> och inte till skärm
lägg till en print på args så vi ser vad den innehåller när du kör python3 main.py --output=res.txt letter_frequency phil.txt
så du måste fortfarande skicka med phil.txt sist
och --output=<filnamn> ska vara en annan fil, annars kommer ud skriva över det innehållet
@jorisdebom hur går det för dig?
limy17
@limy17
Oct 08 2017 12:29
@AndreasArne Skickade såhär senast: python3 main.py --output=phil.txt letter_frequency
Joris Bomert
@jorisdebom
Oct 08 2017 12:30
det här har jag i min kod ( har förresten tagit bort action=true)
IndexError: list index out of range
när jag kollar i mina unknownnargs. får den med urlen, men inte filnamnet
limy17
@limy17
Oct 08 2017 12:31
@AndreasArne Print skriver ut detta för args:
Lindas-MacBook-Pro:analyzer2 linda$ python3 main.py
{'verbose': False, 'silent': False, 'output': 'phil.txt', 'command': None}
Joris Bomert
@jorisdebom
Oct 08 2017 12:31
som jag tänkte skulle vara filename[1])
AndreasArne
@AndreasArne
Oct 08 2017 12:32
@limy17 precis men du ska inte skicka med phil.txt i --output
--output ska var en annan fil för att göra utskrifter i
Joris Bomert
@jorisdebom
Oct 08 2017 12:32
https://codeshare.io/am013j det är min request
AndreasArne
@AndreasArne
Oct 08 2017 12:32
så testa python3 main.py --output=res.txt letter_frequency phil.txt istället
limy17
@limy17
Oct 08 2017 12:32
Varför då?
AndreasArne
@AndreasArne
Oct 08 2017 12:34
option:et --output=<filnamn> betyder att vi vill ha resultats utskriften i fil istället till skärm, letter_frequenxzy kommandot betyder att du vill göra den typen av analys på en fil och efter kommandot måste du skicka in vilken fil du ska analysera, i ditt fall phil.txt
@jorisdebom kan du visa vilka kommandon, options du startar programmet med och sen vad din cli_parser returerar?
Joris Bomert
@jorisdebom
Oct 08 2017 12:37

$ python3 main.py --output=test.txt get https://dbwebb.se/kurser/python/kmom06
{'known_args': {'verbose': False, 'silent': False, 'output': 'test.txt', 'command': 'get'}, 'unknown_args': ['https://dbwebb.se/kurser/python/kmom06']}
get

Traceback (most recent call last):
File "main.py", line 143, in <module>
main()
File "main.py", line 134, in main
requester.save_to_file(a, filename[1])
IndexError: list index out of range

och då trodde jag att test.txt också skulle bli en unknown_args, men det blir inte det
limy17
@limy17
Oct 08 2017 12:38

@AndreasArne Är det bara get i krav 7 som ska kunna använda sig av --output=<file>?
"7. Ladda hem en webbsida med följande kommando.
python3 main.py get <url>
python3 main.py --output=<file> get <url>
Parsa hemsidan och hämta bara ut texten som finns i html-taggen article. Programmet kan bara användas på hemsidor där <article> finns.

Resultatet skall bli att webbsidans text från <article> skrivs ut på skärmen. Om man anger ett option --output=<file> så skall utskriften ske till en fil, istället för skärmen."

Joris Bomert
@jorisdebom
Oct 08 2017 12:39
ja det tror jag
för sedan har man sparat allt i en fil så kan man använda det filnamnet till att analysera
AndreasArne
@AndreasArne
Oct 08 2017 12:40
@limy17 @jorisdebom ja så är det
@jorisdebom om du gör en utskrift av filename, vad innehåller den?
Joris Bomert
@jorisdebom
Oct 08 2017 12:42
[] , alltså tom lista
men det är för att den sparar alla unknown_args
limy17
@limy17
Oct 08 2017 12:42
Ang 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. Resultatet från textanalysen, ska presenteras i JSON-format. Gäller samtliga kommandon för textanalys, inklusive all."
Måste tidigare versioner av funktionerna från analyzer i kmom05 finnas kvar i ver kmom06?
Joris Bomert
@jorisdebom
Oct 08 2017 12:42
eller inte sparar, men lägger de i listan
AndreasArne
@AndreasArne
Oct 08 2017 12:42
@jorisdebom okej, men filenamnet från --output kommer finns inte i unknown_args
den ligger ju i knonw_args under nyckeln output
@limy17 det ska gå att göra allt från kmom05
limy17
@limy17
Oct 08 2017 12:43
Eller räcker det med att de nu går att skriva ut i json-format?
Ok
liacost2003
@liacost2003
Oct 08 2017 12:43
Hej Andreas! Har du tid för ett till fel? :) Jag har fixat funktioner för ping hemsida och ping-history. Men när kag kör ping-history klagar programmet på att jag inte har en unknown_arg. if opts["unknown_args"][0]:
IndexError: list index out of range
funktioner: https://codeshare.io/2p7PYX cli_parse: https://codeshare.io/aJP4yZ
limy17
@limy17
Oct 08 2017 12:44
@AndreasArne Tack för hjälpen!
Joris Bomert
@jorisdebom
Oct 08 2017 12:47
@AndreasArne , ah just det :P det stor ju där :D
AndreasArne
@AndreasArne
Oct 08 2017 12:49
@liacost2003 mm, du försöker plocka ut det första elementet från opts["unknown_args"], men den innehåller ju inget element om du inte skickat med något argument
och då får du indexError, för det indexet existerar inte
så du behöver göra en koll om det finns något första element inan du försöker hämta det
limy17
@limy17
Oct 08 2017 12:50
@AndreasArne Ang. krav 7: Hur behöver funktionen se ut för att output=<file> ska fungera då?
Nu ser funktionen som är tänkt att uppfylla "Om man anger ett option --output=<file> så skall utskriften ske till en fil, istället för skärmen," ut såhär: https://codeshare.io/5zg1qD
liacost2003
@liacost2003
Oct 08 2017 12:51
:fire: försöker fixa
jag trodde att kollen görs om man bara skriver: if opts["unknown_args"][0]:
AndreasArne
@AndreasArne
Oct 08 2017 12:54
@liacost2003 ne då kollar du om värdet som finns på index 0 är True eller False, men det funkar bara om det finns ett värde på index 0
@limy17 aa typ det som ska göras, dock borde du inte spara den som json utan bara direkt skriva ut texten från article i filen
liacost2003
@liacost2003
Oct 08 2017 12:56
@AndreasArne fixar man sånt med len?
AndreasArne
@AndreasArne
Oct 08 2017 12:56
@liacost2003 js det är ett sätt
limy17
@limy17
Oct 08 2017 12:59
@AndreasArne Behöver jag ändra ngt annat i funktionens kod?
AndreasArne
@AndreasArne
Oct 08 2017 13:02
@limy17 skulle gissa att du även behöver en till parameter, för filnamnet du ska skriva resultatet till. Från --output=<filnamn>
Joris Bomert
@jorisdebom
Oct 08 2017 13:03
@AndreasArne min funkar nu och kan spara till fil, behövde göra om min json.dump lite men nu går det. Det ända är att jag får en massa \n mellan varje mening i filen, är det för att jag tog test.txt? inte .json?
liacost2003
@liacost2003
Oct 08 2017 13:03
Tack så mycket @AndreasArne
Brian Welch
@brian-welch
Oct 08 2017 13:04
Kmom06 - för den --output - det är i samma group som verbose och silent, va?
Joris Bomert
@jorisdebom
Oct 08 2017 13:04
japp
Brian Welch
@brian-welch
Oct 08 2017 13:04
tackar
limy17
@limy17
Oct 08 2017 13:05
@AndreasArne Hur kan en sån se ut?
filnamn = ...
bara?
AndreasArne
@AndreasArne
Oct 08 2017 13:16
@jorisdebom borde inte påverkas av vilken filtyp du har
@limy17 hur brukar du göra för att kunna skicka argument til funktioner?
Daggerby
@Daggerby
Oct 08 2017 13:40
Kmom05 Analyzer: Totalt hjärnstillestånd här. Har alla funktionerna klara utom all. Kallar jag på övriga funktioner får jag bara returnvärdet från dem. Hur kommer jag åt printsen från övriga funktioner utan att behöva lägga in alla på nytt?
liacost2003
@liacost2003
Oct 08 2017 13:45
I analyzer har jag return i alla funktioner, för all har jag i main en if sats där jag anropar en funktion i taget och printar ut return-värdena
Daggerby
@Daggerby
Oct 08 2017 13:50
Jag fick en idé med printsen nu, inte optimalt, men funkar :-)
liacost2003
@liacost2003
Oct 08 2017 13:50
då är det optimalt :D
Daggerby
@Daggerby
Oct 08 2017 13:51
Antar att all även ska vara mottaglig för verbose och silent.
liacost2003
@liacost2003
Oct 08 2017 13:52
ja, det blir en lång if sats
Daggerby
@Daggerby
Oct 08 2017 14:02
Yay! Det funkade. Nu får det bli lite frisk luft i solen innan redovisning :-)
Bernard Longho
@blongho
Oct 08 2017 14:50

Hallå, jag har svårt att får rätt antal ord i phil.txt

Lines: 19
Words: 199  # should be 201 according to https://wordcounttools.com/

the  12
to  8
of  6
he  5
and  5 # supposed to be 7
a  4
in  4

any tips?

liacost2003
@liacost2003
Oct 08 2017 14:53
jag fick också 199
Bernard Longho
@blongho
Oct 08 2017 14:55
@liacost2003 Ok men jag man söker and med ctrl + F i filen, ser man att andförekommer 7 gånger. Jag får 5 hur än jag gör
Brian Welch
@brian-welch
Oct 08 2017 15:00
199 här också
Bernard Longho
@blongho
Oct 08 2017 15:02
@brian-welch och @liacost2003 fick ni Gpå det?
och hur många andoch street?
limy17
@limy17
Oct 08 2017 15:02
Ngn som är klar med kmom06? Jag får inte terminal-kommandot "python3 main.py --output=text.txt get https://dbwebb.se" att fungera.
Hur löste ni krav 7?
Brian Welch
@brian-welch
Oct 08 2017 15:02
@blongho I am betting the web tool counted hyphenated words as two, rather than 1. Grammer rules dictate that hyphenated words are technically one word
så vi har det rätt
word_frequency beskrivas som procent, om jag förstår rätt
Joris Bomert
@jorisdebom
Oct 08 2017 15:05
@limy17 men efter 'get' kommandot ska det väl vara en url? inte fil?
--output=text.txt get (url)
@blongho jag fick också 199 ord, fick G
qara17
@qara17
Oct 08 2017 15:06
jag får inte till detta på något sätt, vet inte vad jag gör för fel.. suttit med den länge, jag får inte till min data in i en fil någon som vill titta på koden https://codeshare.io/2p7VDD
Bernard Longho
@blongho
Oct 08 2017 15:07

@blongho I am betting the web tool counted hyphenated words as two, rather than 1. Grammer rules dictate that hyphenated words are technically one word

Another website https://wordcounter.net/ actually gives 199 as total number of words but gives number of occurence of the streetas 5(which is correct) is one counts manually.

Brian Welch
@brian-welch
Oct 08 2017 15:07
@blongho Jag fick 5-'street' och 7-'and'
Bernard Longho
@blongho
Oct 08 2017 15:08
@blongho Jag fick 5-'street' och 7-'and' correct
Vad har jag för fel?
https://codeshare.io/adAVNZ
Joris Bomert
@jorisdebom
Oct 08 2017 15:08
@qara17 , vet inte om det hjälper, men jag har, if choice == inv pick
och sedan istället för with open("marvindata.txt", "w") as filehandler, har jag with open("marvindata.txt", "a") as filehandler
"a" är då append istället, jag tror at "w" skriver över det som redan står där
qara17
@qara17
Oct 08 2017 15:09
jag har även provat med "a"
limy17
@limy17
Oct 08 2017 15:11
@jorisdebom En typo, sorry. Har ändrat nu :)
Ngn som är klar med kmom06? Jag får inte terminal-kommandot "python3 main.py --output=text.txt get https://dbwebb.se" att fungera.
Hur löste ni krav 7?
pip3000
@pip3000
Oct 08 2017 15:13
" parser.add_argument("-o", "--output", + XXX?)"
Vad ska output ha för olika grejer där det står XXX?
Joris Bomert
@jorisdebom
Oct 08 2017 15:17
@limy17 --output har jag lagt till cli parser i samma lista som --verbose o --silent. sedan i funktionen har jag request.get och använder beautifulsoup för att leta allt med <article>. Sedan i main callar jag på get först, sedan en till if statement för att kolla om output är med. där kallar jag på funktionen
Brian Welch
@brian-welch
Oct 08 2017 15:18
kmom06 - Tolkar jag uppgifter rätt:
För ping & quotekommandot vi skulle ställe upp funktionen i en ny fil som heter ´request.py´;
get & title in en fil html_parser.py;
--output funktioner i en fil output_to_file.py - - istället för analyzer.py??
Joris Bomert
@jorisdebom
Oct 08 2017 15:18
@limy17 det jag gjorde fel när det inte funkade var att jag hade store_true i cli parser, och jag trodde att filen skulle bli en unknown arg, men det blir en value av output
@brian-welch jag funderade samma sak :P jag har lagt allting i requester. Men jag tror att det är så att allt som man använder beautifulsoup för ska vara i html parser, allt annat i requester
Brian Welch
@brian-welch
Oct 08 2017 15:21
@jorisdebom Det är förvirrande tycker jag
Joris Bomert
@jorisdebom
Oct 08 2017 15:21
en för BeautifulSoup (html_parser.py)
en för att hantera funktionaliteten med Request (requester.py)
och en för att skriva till fil (output_to_file.py).
så står det på dbwebb
Daggerby
@Daggerby
Oct 08 2017 15:30
WARNING pylint failed: './me/kmom05/analyzer/main.py'
* Module main
R: 32, 4: Too many nested blocks (6/5) (too-many-nested-blocks)
Kan detta bli godkänt om man skickar in, eller måste det åtgärdas?
limy17
@limy17
Oct 08 2017 15:31
@brian-welch Extremt röriga instruktioner till detta kursmoment.
Joris Bomert
@jorisdebom
Oct 08 2017 15:35
@Daggerby tror inte att det blir godkänt, man får nog komplettering då
limy17
@limy17
Oct 08 2017 15:36
@jorisdebom @brian-welch Ingen av er som hittat hur detta ska lösas i kursmaterialet? Det enda jag hittade var detta videoklipp: https://www.youtube.com/watch?v=hCrqrB9_YE0&list=PLKtP9l5q3ce93pTlN_dnDpsTwGLCXJEpd&index=30
Men det gav tyvärr inte så mkt. Hade behövts ngt som går igenom allt, steg för steg, från cli-parser, till main, till funktionen. Hur allt ska kopplas ihop.
@jorisdebom Jag är klar med första delen av krav 7, men får inte --output=<fil> att fungera. Får du det?
Joris Bomert
@jorisdebom
Oct 08 2017 15:40
@limy17 jag har fått det att funka, men jag strular lite med pretty print. Allt i filen hamnar fullt efter varan och med \n efter varje mening
men jag har fått det till en fil ja
limy17
@limy17
Oct 08 2017 15:43
Vilka argument skickar du till funktionen? Och hur specificeras detta i main?

@jorisdebom Testa att lägga det i en dictionary :)

Jag får det här felmeddelandet: TypeError: savePage() missing 1 required positional argument: 'urlPage'

Joris Bomert
@jorisdebom
Oct 08 2017 15:47
@limy17 när man gör en savePage() måste man ha med 2 argument, output och filnamnet
def save_to_file(output, fileName):
pip3000
@pip3000
Oct 08 2017 15:48
Måste man använda getopt?
Joris Bomert
@jorisdebom
Oct 08 2017 15:48
jag gör inte det
pip3000
@pip3000
Oct 08 2017 15:50
Just nu kör min main.py cli_parser.py som kör requests.py där den kör requests.get, skickar vidare till html_parser som kör en beautifulsoup som sedan kör output_to_file som sparar ner den. Känns lite överflödigt med 5 filer men det måste vara så va?
Joris Bomert
@jorisdebom
Oct 08 2017 15:51
@limy17 i main kallar jag funktionen och lägger in value:n för output:
requester.save_to_file(a, opts["output"])
pip3000
@pip3000
Oct 08 2017 15:51
Jag gör det i cli_Parser i stället
Joris Bomert
@jorisdebom
Oct 08 2017 15:51
@pip3000 så ska det nog vara tror jag , fast jag har inte så
pip3000
@pip3000
Oct 08 2017 15:52
Antar att båda tycker att varandras sätt är svårare eftersom vi inte gjort så haha
limy17
@limy17
Oct 08 2017 15:53
@jorisdebom Vad står "a" för i anropet?
Och vad heter satta argument för funktionen save_to_file? (Inte de som skickas från main, utan hur är de initierade i funktionen, def save_to_file(x, y): ?
Joris Bomert
@jorisdebom
Oct 08 2017 16:23
a = requester.get_article(filename[0])
vet inte varför jag kallade det för a :P men det var väl mest för att kolla om det ens skulle funka
och det gjorde det
limy17
@limy17
Oct 08 2017 17:17
@jorisdebom Ok, jag förstår. Det är ju det viktigaste, att det fungerar.
Tack för att du delade med dig av dina tankar och strategier kring uppgiften.
Joris Bomert
@jorisdebom
Oct 08 2017 17:18
har du fått det att funka?
jag håller fortfarande på med min pretty print :P blir lite fel med analyseringen med alla \n emellan :D
limy17
@limy17
Oct 08 2017 17:24
@jorisdebom Har svarat i privat chatt :)
pip3000
@pip3000
Oct 08 2017 18:57
Vad betyder "Command returned non-zero exit status which might indicate failure." Jag får det när jag kör inspect kmom06 på allt
pip3000
@pip3000
Oct 08 2017 21:50
text = en dictionary med ping codes och vilken hemsida det var. Jag antar att den skriver en .json fil på fel sätt för jag får felmeddelande när jag försöker öppna den.
Skriv:
with open("pings.json", 'a') as thefile:
json.dump(text, thefile, indent=4)
Öppna:
with open('pings.json', encoding='utf-8') as data_file:
data = json.load(data_file)