Hjälp med kmom05

  • Författare
  • Meddelande

natalia

sql-kodare

  • Inlägg: 55
  • Blev medlem: 26 jul 2017, 20:10

Hjälp med kmom05

Inlägg03 okt 2017, 16:53

Hej,

Jag skulle behöva hjälp med kmom05 - analyzer delen. Hur kan man öppna en fil genom t ex:

python3 lines phil.txt

?

Jag förstår att phil.txt hamnar i unknownn_args, men hur ska man göra sen? Hur kopplar man den koden med funktionerna i analyzer.py?

Det vore utmärkt om ni kunde producera en till video om detta. Jag har gått igenom hela materialet på dbwebb och youtube-kanalen, men har tyvärr inte kunnat gå vidare.

Tack på förhand!

enilsson

javascript-guru

  • Inlägg: 85
  • Blev medlem: 10 aug 2017, 18:30

Re: Hjälp med kmom05

Inlägg03 okt 2017, 17:04

natalia

sql-kodare

  • Inlägg: 55
  • Blev medlem: 26 jul 2017, 20:10

Re: Hjälp med kmom05

Inlägg03 okt 2017, 17:45

Ok, tack. Har denna kod hjälpt dig?

Kod: Markera allt
parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
with open(args.filename) as file:
  # do stuff here


Ska man stoppa 'phil.txt' i stället för 'filename'?

enilsson

javascript-guru

  • Inlägg: 85
  • Blev medlem: 10 aug 2017, 18:30

Re: Hjälp med kmom05

Inlägg03 okt 2017, 17:50

Ja, det är den koden som hjälpte mig.

Du ska inte stoppa 'phil.txt' i koden, det är användaren som ska stoppa 'phil.txt' i terminalen.

Tips: Om användaren anger en annan fil än phil.txt kan du lägga en try/except FileNotFoundError.

natalia

sql-kodare

  • Inlägg: 55
  • Blev medlem: 26 jul 2017, 20:10

Re: Hjälp med kmom05

Inlägg03 okt 2017, 18:34

Funder på vad denna rad gör. Min fil blir alltså en optional argument? Det är väl så man skapar -s, -v osv. Ska inte min fil vara en argument istället (parser.add_subparsers)?

Kod: Markera allt
parser.add_argument('filename')

enilsson

javascript-guru

  • Inlägg: 85
  • Blev medlem: 10 aug 2017, 18:30

Re: Hjälp med kmom05

Inlägg03 okt 2017, 19:33

Lägg
Kod: Markera allt
parser.add_argument('filename', help="file to analyze")
sist.

Kör
Kod: Markera allt
python3 main.py -h


Så får du i terminalen:

Kod: Markera allt
positional arguments: filename - file to analyze


Alltså, filename blir en positional argument.

Om jag kör till exempel:

Kod: Markera allt
python3 main.py letters


Får jag i terminalen:

Kod: Markera allt
main.py: error: the following arguments are required: filename


OBS: Jag har inte använt 'parser.add_subparsers' och min analyzer funkar fint

natalia

sql-kodare

  • Inlägg: 55
  • Blev medlem: 26 jul 2017, 20:10

Re: Hjälp med kmom05

Inlägg03 okt 2017, 19:40

Tackar! Vad menar du med "sist"? Precis under detta?
Kod: Markera allt
group.add_argument("-v", "--verbose", help="more output", action="store_true")
group.add_argument("-s", "--silent", help="less output", action="store_true")

enilsson

javascript-guru

  • Inlägg: 85
  • Blev medlem: 10 aug 2017, 18:30

Re: Hjälp med kmom05

Inlägg03 okt 2017, 19:52

Japp. Jag vet inte om det skulle vara på det sättet men det funkar för mig ändå. :)

natalia

sql-kodare

  • Inlägg: 55
  • Blev medlem: 26 jul 2017, 20:10

Re: Hjälp med kmom05

Inlägg03 okt 2017, 20:30

Ok testar :)
Senast redigerad av natalia 03 okt 2017, 20:57, redigerad totalt 1 gång.

natalia

sql-kodare

  • Inlägg: 55
  • Blev medlem: 26 jul 2017, 20:10

Re: Hjälp med kmom05

Inlägg03 okt 2017, 20:56

Hur har du skapat de andra commands? Också via parser.add_argument("command1", help="information on command1")? Om jag gör så så blir alla commands tvingande samtidigt:

$ python3 main2.py phil.txt all
usage: main2.py [-h] [-v | -s] [-V]
filename all lines words letters word_frequency
letter_frequency
main2.py: error: the following arguments are required: lines, words, letters, word_frequency, letter_frequency

enilsson

javascript-guru

  • Inlägg: 85
  • Blev medlem: 10 aug 2017, 18:30

Re: Hjälp med kmom05

Inlägg03 okt 2017, 21:05

Kod: Markera allt
parser = argparse.ArgumentParser(prog=PROGRAM, description=print_info(), formatter_class=argparse.RawTextHelpFormatter)

subparsers = parser.add_subparsers(title="commands (positional arguments)", help='Available commands', dest="command")

subparsers.add_parser("lines", help="count lines in text")
subparsers.add_parser("words", help="count words in text")
subparsers.add_parser("letters", help="count letters in text")
#osv..

parser.add_argument('filename', help="file to analyze")


Det står ett exempel i kursrepot.

natalia

sql-kodare

  • Inlägg: 55
  • Blev medlem: 26 jul 2017, 20:10

Re: Hjälp med kmom05

Inlägg03 okt 2017, 21:13

Annan fråga: anropar du alltså funktionerna så här:

main.py phil.txt letters

?

Jag tror nämligen att man vill att vi ska anropa så här:

main.py letters phil.txt
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Hjälp med kmom05

Inlägg04 okt 2017, 11:18

natalia skrev:Hur kan man öppna en fil genom t ex:

python3 lines phil.txt

?

Jag förstår att phil.txt hamnar i unknownn_args, men hur ska man göra sen? Hur kopplar man den koden med funktionerna i analyzer.py?


main.py importerar cli_parser och analyzer

cli_parser.py har en funktion som använder argparse för att tolka kommandot från terminalen och returnerar hela resultatet.

main.py tar emot resultatet från cli_parser och avgör vad programmet sedan ska utföra. Man kan t.ex. skapa enskilda variabler som innehåller den information som krävs (en för vilket kommando som körs, en för filnamnet, osv).

Baserat på användarens val ska olika funktioner från analyzer anropas.

analyzer.py har funktioner som väntar på att bli anropade. Det är där som den faktiska analysen utförs, men bara i den ordningen och omfattning som main.py bestämmer. Funktionerna kan ta emot argument, t.ex. vilken fil som ska öppnas.

Jag föreslår att funktionerna i analyzer returnerar absoluta minimum, så en funktion som räknar antalet ord i en fil returnerar bara en integer. Sedan är det upp till main.py att avgöra hur mycket text som ska skrivas ut baserat på användarens val av verbose och silent.

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 15 gäster