These are chat archives for dbwebb-se/python

7th
Oct 2017
Allinrep
@pejg12
Oct 07 2017 07:40

@limy17 följ felmeddelandet rad för rad, börja uppifrån, tills det inte längre gäller din kod. det sista som rör din kod är raderna:

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"))

Så något är fel med json.load(open("save-res.json", "r")). Kolla i manualen och ta reda på vilka argument som ska skickas till .load(). kontrollera att filen save-res.json existerar.

@limy17 Anledningen till att inte ens dina print fungerade igår var för att du hade råkat få med ett # före kommandot:
Lindas-MacBook-Pro:analyzer2 linda$ #python3 main.py lines json.jsonkmom06 genom: python3 main.py --output lines phil.txt
# har samma funktion i terminalen som i python-koden, det blev en kommentar istället för att köras som riktig kod
limy17
@limy17
Oct 07 2017 09:30
@pejg12 Tack, det är ju lätt att åtgärda iaf :)
limy17
@limy17
Oct 07 2017 09:45

Någon som vet vad detta kan betyda?

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 14 (char 13)

limy17
@limy17
Oct 07 2017 09:59
Och hur får jag till en ny rad här? https://codeshare.io/5RzXvO
Pierre
@carlsson_pierre_twitter
Oct 07 2017 10:21

Håller på med KMOM05 extra: att lägga till ett option, --amount=<integer> , för frekvensberäkningen. Har lagt till:

"parser.add_argument("-a", "--amount", dest="size", default=7, action="store", type=int, help="Choose length of list")"

men när programmet exekveras och användaren anger säg:
amount=3 eller bara 3 för den delen
så sparas inte det i size.
Uppskattar hjälp i vart det brister i min förståelse för Cli_parser.
Tack på förhand!

Allinrep
@pejg12
Oct 07 2017 11:12
@carlsson_pierre_twitter visa ett exempel på hela kommandoraden du kör i terminalen så vi kan se om det är där det brister
@limy17 fel som pekar på filer som du inte har skapat själv (t.ex. decoder.py) är inget du kan åtgärda. någonstans innan felmeddelandet pekar på den filen så borde den peka på dina filer istället, på någon funktion du kör. kanske har du fel parametrar till någon funktion.
limy17
@limy17
Oct 07 2017 11:14

@pejg12 Ok, såhär ser hela felmeddelandet ut. Kan du ge mig en hint? :)

Lindas-MacBook-Pro:analyzer2 linda$ python3 main.py --output word_frequency phil.txt
In file:
Traceback (most recent call last):
File "main.py", line 63, in <module>
main()
File "main.py", line 44, in main
analyzer.word_frequency2(unknownargs[0]) #python3 main.py --output word_frequency phil.txt
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/analyzer.py", line 69, in word_frequency2
print(output_to_file.readFile2())
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/output_to_file.py", line 20, in readFile2
hist2 = 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 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 14 (char 13)
Lindas-MacBook-Pro:analyzer2 linda$

Allinrep
@pejg12
Oct 07 2017 11:14

@limy17 följ felmeddelandet rad för rad, börja uppifrån, tills det inte längre gäller din kod. det sista som rör din kod är raderna:

File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/output_to_file.py", line 20, in readFile2
hist2 = json.load(open("save-res.json", "r"))

Så något är fel med json.load(open("save-res.json", "r")). Kolla i manualen och ta reda på vilka argument som ska skickas till .load(). kontrollera att filen save-res.json existerar.

limy17
@limy17
Oct 07 2017 11:27
Funktionen ovanför bygger på samma struktur, och fungerar:
def readFile():
"""Read to file"""
read1 = json.load(open("json.json", "r"))
return read1
Skillnaden är att det sparas till en annan json fil. Båda filerna tar emot objekt.
Enligt föreläsningen skulle man göra såhär.
Allinrep
@pejg12
Oct 07 2017 11:28
kontrollera att filen finns och går att öppna
limy17
@limy17
Oct 07 2017 11:28
Det går bra
För att kunna tolka det som står i den bättre, skulle jag vilja infoga ett radbryt: https://codeshare.io/5RzXvO
Dock fungerar inte \n av ngn anledning?
Du tänker öppna genom terminalen? Ska kolla det också...
Allinrep
@pejg12
Oct 07 2017 11:30
radbrytningar är en del av en textsträng. "en rad\n"
limy17
@limy17
Oct 07 2017 11:31
Men det fungerar inte.
Lägger jag till det: ' times\n'
blir det ingen skillnad https://codeshare.io/5RzXvO
Filen ser ut såhär bara: 1\n""public = 1\n""school = 2\n""known (...etc)
@pejg12 Hur testar man om en json-fil går att öppna i terminalen?
Allinrep
@pejg12
Oct 07 2017 11:35
det ser ut som att du försöker skapa json-formatet själv. det härliga med json är att man kan spara ner python-objekt utan att behöva formattera det. skapa t.ex. en dictionary och spara dictionaryn i filen, så blir det automatiskt radbrytningar mellan varje nyckel/värde-par
more filensnamn.json
limy17
@limy17
Oct 07 2017 11:37
Det gick bara att öppna den ena av json-filerna:
Lindas-MacBook-Pro:analyzer2 linda$ more save_res.json
save_res.json: No such file or directory
Lindas-MacBook-Pro:analyzer2 linda$ more json.json
"\nNyheter\n"
Lindas-MacBook-Pro:analyzer2 linda$
Allinrep
@pejg12
Oct 07 2017 11:37
där har du felet då, du kan inte läsa en fil som inte finns
prova funktionerna som skapar filen först då
limy17
@limy17
Oct 07 2017 11:38
Är det ett felaktigt val av filnamn?
Allinrep
@pejg12
Oct 07 2017 11:38
jag antar det? har du skapat filen förut?
limy17
@limy17
Oct 07 2017 11:38
Jag har skapat filen
Testar att byta namn på den då
Allinrep
@pejg12
Oct 07 2017 11:38
kör ls för att se den då
det är viktigt att få rätt namn på saker och ting :D
limy17
@limy17
Oct 07 2017 11:39
Lindas-MacBook-Pro:analyzer2 linda$ ls
pycache cli_parser.py json.json output_to_file.py requester.py
analyzer.py html_parser.py main.py phil.txt save-res.json
Allinrep
@pejg12
Oct 07 2017 11:39
save-res.json är inte samma som save_res.json
limy17
@limy17
Oct 07 2017 11:40
Det var bara en typo av mig i chatten
Allinrep
@pejg12
Oct 07 2017 11:40
aha
Lindas-MacBook-Pro:analyzer2 linda$ more save_res.json
save_res.json: No such file or directory
limy17
@limy17
Oct 07 2017 11:40
Men tror du det kan bero på filnamnet?
Allinrep
@pejg12
Oct 07 2017 11:41
självklart kan det bero på det, man kan inte läsa en fil som inte finns
limy17
@limy17
Oct 07 2017 11:41
Den öppnas nu av terminalen i alla fall
Allinrep
@pejg12
Oct 07 2017 11:41
kontrollera att filnamnet du anger i koden är det som finns
limy17
@limy17
Oct 07 2017 11:41
Så den går att öppna med existerande filnamn
Robert Larsson
@Gutzcode
Oct 07 2017 11:42
@limy17 Hårdkodar du filnamnet? I så fall kan det spela roll varifrån du kör programmet. Kör du programmet från samma mapp där filen ligger?
Allinrep
@pejg12
Oct 07 2017 11:42
vad händer när du kör python3 main.py --output word_frequency phil.txt nu då?
limy17
@limy17
Oct 07 2017 11:43
Detta:
Lindas-MacBook-Pro:analyzer2 linda$ python3 main.py --output word_frequency phil.txt
In file:
Traceback (most recent call last):
File "main.py", line 63, in <module>
main()
File "main.py", line 44, in main
analyzer.word_frequency2(unknownargs[0]) #python3 main.py --output word_frequency phil.txt
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/analyzer.py", line 69, in word_frequency2
print(output_to_file.readFile2())
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/output_to_file.py", line 20, in readFile2
read2 = 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 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 14 (char 13)
Allinrep
@pejg12
Oct 07 2017 11:43
aha, ser nu att kravet säger att man ska kunna ange ett filnamn själv. --output=mittfilnamn.json, inte bara --output
limy17
@limy17
Oct 07 2017 11:43
Hur gör man det då?
Allinrep
@pejg12
Oct 07 2017 11:45
det blir fortfarande fel på rad 20 i readFile2. prova att bryta upp raden i mindre bitar för att se vilken som felar. plocka ut open()-delen och spara det till en variabel istället.
filobjekt = open("save-res.json", "r")
read2 = json.load(filobjekt)
limy17
@limy17
Oct 07 2017 11:51
Se längst ned: https://codeshare.io/2j8VmP
Allinrep
@pejg12
Oct 07 2017 11:53
där har du kod ja, kod säger mig väldigt lite. vad jag behöver veta är vad du förväntar dig ska hända när du kör koden (det vet jag redan i det här fallet) och vad som egentligen händer (det vet jag inte än, dags att testa)
limy17
@limy17
Oct 07 2017 11:54
Det som ska hända är att funktionen läser json-filen, och sen returnerar eller skriver ut innehållet i json-format
Nu händer ingenting av detta som jag förstår?
Allinrep
@pejg12
Oct 07 2017 11:55
det är bara du som har ditt program, testa i terminalen och se vad som händer :)
limy17
@limy17
Oct 07 2017 11:56
Nada, tyvärr.
Allinrep
@pejg12
Oct 07 2017 11:56
blev de tnågon skillnad när du bröt ut open-koden. vad ändrades i felmeddelandet? vilken rad är felet på nu?
limy17
@limy17
Oct 07 2017 11:56
Lindas-MacBook-Pro:analyzer2 linda$ python3 main.py --output word_frequency phil.txt
In file:
Traceback (most recent call last):
File "main.py", line 63, in <module>
main()
File "main.py", line 44, in main
analyzer.word_frequency2(unknownargs[0]) #python3 main.py --output word_frequency phil.txt
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/analyzer.py", line 69, in word_frequency2
print(output_to_file.readFile2())
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/output_to_file.py", line 21, in readFile2
jsonobject = json.load(jsonfile)
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 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 14 (char 13)
Allinrep
@pejg12
Oct 07 2017 11:56
File "/Users/linda/dbwebb-kurser/python/me/kmom06/analyzer2/output_to_file.py", line 21, in readFile2
jsonobject = json.load(jsonfile)
hm
dags att testa i pythoninterpretatorn. skriv bara python3 i terminalen och tryck enter.
limy17
@limy17
Oct 07 2017 11:58
Lindas-MacBook-Pro:analyzer2 linda$ python3
Python 3.6.2 (v3.6.2:5fd33b5926, Jul 16 2017, 20:11:06)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Allinrep
@pejg12
Oct 07 2017 11:59
då får du en ny prompt som börjar med >>> och där kan du skriva pythonkod
jag testade att öppna en fil på min egen dator
limy17
@limy17
Oct 07 2017 12:00
import json
jsonfile = open("save-res.json", "r")
jsonobject = json.load(jsonfile)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 14 (char 13)
Allinrep
@pejg12
Oct 07 2017 12:02
$ python3

>>> import json
>>> jsonfile = open("mini.txt", "r")
>>> jsonfile.read()
(innehållet i min textfil)
>>> jsonobject = json.load(jsonfile)
(massa felmeddelanden)
fick en ledtråd till vad felet är :) jag öppnade ju en vanlig fil som inte följer json-formatet.
gå till http://pro.jsonlint.com/ och testa innehållet i din json-fil
klistra in hela innehållet och tryck på "Lint"
limy17
@limy17
Oct 07 2017 12:03

Det fungerar iaf bra med funktionen ovan, med den andra json-filen:

import json
read1 = json.load(open("json.json", "r"))
return read1
File "<stdin>", line 1
SyntaxError: 'return' outside function
print(read1)

Nyheter

Allinrep
@pejg12
Oct 07 2017 12:04
är du på jsonlint nu?
limy17
@limy17
Oct 07 2017 12:04
Ja
Den vill ha ett argument till funktionen?
Allinrep
@pejg12
Oct 07 2017 12:06
jsonlint kontrollerar att du har formatterat texten på det format som json kräver, den kollar helt enkelt om det är rätt syntax
man kan klistra in sin json där och validera
json.json fungerar för att det är rätt syntax i filen
save-res.json fungerar inte för det är fel syntax
Daggerby
@Daggerby
Oct 07 2017 12:07
Kmom05. Analysera text och ord
$ python3 main.py lines phil.txt
{'known_args': {'verbose': False, 'silent': False, 'command': 'lines'}, 'unknown_args': ['phil.txt']}
lines
['phil.txt']
limy17
@limy17
Oct 07 2017 12:07
Jaha, rätt syntax som skickas till filen alltså?
Daggerby
@Daggerby
Oct 07 2017 12:07
Får jag ut av denna kod. Lyckas fortfarande inte få tag i unknownargs och göra något med det. https://codeshare.io/aJPqX6
Allinrep
@pejg12
Oct 07 2017 12:08
@limy17 om du ska kunna öppna filen med json-modulen så måste varenda tecken i hela filen följa rätt syntax. så jag säger det jag sa förut: skapa en dictionary med det som ska in i filen istället, och spara hela dictionaryn istället för att bygga upp en textsträng med fnuttar och radbrytningar. json kan ta emot en dictionary att spara.
limy17
@limy17
Oct 07 2017 12:08
Ska försöka :)
Allinrep
@pejg12
Oct 07 2017 12:09
@Daggerby jag ser att du har printat unknown_args, men ändå säge rdu att du inte kan komma åt det. prova att printa type() runt det som inte fungerar, så du ser vad det är för innehåll du har att göra med. olika typer har ju olika metoder.
limy17
@limy17
Oct 07 2017 12:17
@pejg12 Försök 1: https://codeshare.io/2KoqOo
Allinrep
@pejg12
Oct 07 2017 12:18
jag vill inte se koden, jag vill veta om det funkade! :)
limy17
@limy17
Oct 07 2017 12:22
Jag skapade en ny json-fil "for the occasion". Den verkar inte vara "writable". Vilket kommando skulle man använda då? 666 eller 777 och nåt mer?
Allinrep
@pejg12
Oct 07 2017 12:23
det står i unix-guiden i labbmiljön
Daggerby
@Daggerby
Oct 07 2017 12:23
Det är en lista, nu har jag ändrat så att om phil.txt är i listan så ska den sättas i variablen fname. Som jag sen försöker använda i nästa if sats med lines. Men inget händer. Få bara ut samma svar i terminalen.
Allinrep
@pejg12
Oct 07 2017 12:24
@Daggerby printa ut fname och type(fname)
@limy17 vet inte om du behöver ändra några rättigheter. kolla bara vilken bokstav du skickar till open() och jämför med manualen. https://docs.python.org/3/library/functions.html#open
limy17
@limy17
Oct 07 2017 12:28
Hoppar det tror jag, och fortsätter spara till den gamla filen save-res.json
Allinrep
@pejg12
Oct 07 2017 12:29
okej, men du måste få rätt på json-formatet inne i filen, det gör man lättast genom att inte bry sig om json-formatet alls och bara spara i python-format
limy17
@limy17
Oct 07 2017 12:29
Hur raderar jag innehållet i filen, utan att radera filen? Det är sparat med "a" istället för "w"
Allinrep
@pejg12
Oct 07 2017 12:29
öppna filen med atom och ändra vad du vill
limy17
@limy17
Oct 07 2017 12:30
Ok, ändrar till w nu, då a inte behövs längre i och med bytet till dictionary
limy17
@limy17
Oct 07 2017 12:37
@pejg12 Hur ändrar jag så man kan skriva kommandot output=<fil> i terminalen?
Daggerby
@Daggerby
Oct 07 2017 12:38
Jag får den inte till att printa fname, men jag antar att det är en str. Sen kollar jag om commandot var lines och skickar in fname i funktionen. Men inget kommer ut!?
Allinrep
@pejg12
Oct 07 2017 12:56
@limy17 det gör man i argparse
Pierre
@carlsson_pierre_twitter
Oct 07 2017 12:56

@pejg12
Så här skriver jag:
python3 main.py word_frequency phil.txt 3
eller:
python3 main.py word_frequency phil.txt size=3
python3 main.py word_frequency phil.txt
size 3

och det här kommer ut:

{'known_args': {'verbose': False, 'silent': False, 'filename': None, 'size': 7, 'command': 'word_frequency'}, 'unknown_args': ['phil.txt', '3']}

Allinrep
@pejg12
Oct 07 2017 12:57
@Daggerby kan det vara så att fname är tom? print("här>" + fname + "<där")
@carlsson_pierre_twitter hamnar 3:an i unknown_args alla gånger?
Pierre
@carlsson_pierre_twitter
Oct 07 2017 12:58
@pejg12 yes
Allinrep
@pejg12
Oct 07 2017 13:00
verkar som att argparse inte vet att size ska ta emot ett argument. kolla i manualen hur man skriver för att ta emot argument
Pierre
@carlsson_pierre_twitter
Oct 07 2017 13:09
@pejg12 har läst hur mycket som helst senaste 2 dagarna om det här problemet. helt snurrig och slut i kolan. Tunnelseende deluxe. Det är några luckor i min helhetsförståelse kring argparse som gör att jag inte får hela sammanhanget av hur den funkar. På ovan problem har jag trixat ihop en lösning på annat sätt bara för att få det att funka och kunna gå vidare. Men det är inte så det ska lösas så inte nöjd med det. Vill förstå det hela. Beräkningar, presentation etc. funkar hur fint som helst...
Allinrep
@pejg12
Oct 07 2017 13:22
@carlsson_pierre_twitter aha. jag är själv inte så insatt i argparse. skriv gärna ett inlägg på forumet, det är fler ögon som läser där.
Pierre
@carlsson_pierre_twitter
Oct 07 2017 13:35
Utmärkt. Tack för hjälpen så här långt!
@pejg12
Utmärkt. Tack för hjälpen så här långt!
limy17
@limy17
Oct 07 2017 13:49
@pejg12 Ok, tack. Får leta där då :)
Daggerby
@Daggerby
Oct 07 2017 14:02
Första framsteget på över en vecka. Wohoo :-)
Pierre
@carlsson_pierre_twitter
Oct 07 2017 14:04
@pejg12 tror jag löst det nu! Wohoooooooooooo!!! ! ! !!?!?!?!
Daggerby
@Daggerby
Oct 07 2017 16:37
Om man kör en funktion inne i en annan funktion, kan man förhindra printen från första funktionen från att printas ut?
Den ska printas om man kör funktion 1 själv, men inte om man kör funktion 2 med funktion 1 i sig
Allinrep
@pejg12
Oct 07 2017 17:34
@Daggerby undvik print inne i funktionen, och printa istället på stället där du anropar funktionen.
Daggerby
@Daggerby
Oct 07 2017 18:23
Ok ska prova med det. Kändes som jag måste sköta verbose och silent utifrån med, så får tänka om :-)
qara17
@qara17
Oct 07 2017 19:15
några tips om hur jag ska tänka för att spara innehålet i inventory i en fil, nästa fråga är att innehållet är ju i form av en lista, går det att skapa lista en text fil, https://codeshare.io/2p7VDD
gäller sista uppgift marvin kmom04