Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

[Python] SimpleNotes

Od dobrych kilku tygodni (z przerwami co prawda) staram się nauczyć coś niecoś o Pythonie. Nie dawno. Raptem kilka dni temu poczułem, że umiem już dostatecznie dużo, by stworzyć coś pożytecznego. Tj. bardziej pożytecznego od różnej maści hello world.
Mój wybór padł na prosty notatnik.

Dlaczego Python?

Bo to najlepiej mi znany język. Trochę umiem c++, ale nie na tyle, by zrobić coś pożytecznego, nie siedząc przy okazji pół dnia w dokumentacji. Prędkość nie jest ważna. Do tego dorzucić można wygodne API do GTK+3 i QT4.

Dokumentacja dla GTK+3

Co już jest?

Na razie powstaje aplikacja GUI. Do waszej dyspozycji udostępniam na razie konsolowy odpowiednik. Poniżej znajduje się kod źródłowy aplikacji w wersji konsolowej. Z mojego Gita pobrać możecie core aplikacji GUI.

Kod źródłowy

#!/usr/bin/python # -*- coding: utf-8 -*- ### ::FUNCTION" :: ### ########################### ### Liczba linii w pliku### ########################### def NumberOfLine(): #Number of line i = 0 with open("Notes.txt", "r") as NOL: for line in NOL: try: if line.strip() != False and line[1] != "@": i = i+1 except IndexError: pass NOL.close() return i ######################### ### DELETE LINES ### ######################### def Delete(x): with open("Notes.txt","r") as f: items = f.readlines() f.close() with open("Notes.txt","w") as out: for item in items[x:]: out.write("%s\n" % item) ######################### print "Wybierz\n" print "|A|dd line\n|R|ead Note File\n|D|elete\n|Q|uit" choice = "N" ######################### while(choice != "Q"): choice = raw_input("Twoj wybor:\t") if(choice == "A" or choice == "a"): text = raw_input("Podaj? notatke. ENTER konczy\n\n") with open("Notes.txt","a") as notefile: NOL = NumberOfLine()+1 if text[0] != '@': notefile.write("["+str(NOL)+"] "+text+"\n") notefile.close() else: notefile.write(text+"\n") notefile.close() continue elif(choice == "R" or choice == "r"): notefile = open("Notes.txt","r") print notefile.read() notefile.close() continue elif(choice == "D"): x = raw_input("Ile linii usunac?") Delete(int(x)) continue else: continue

Instalacja

Najprościej:

  • Pobrać z linku na końcu plik NotesCmd.py i Notes.txt
  • Zainstalować (jeśli nie mamy) Python 2.6 lub nowszy
  • Dwuklik na pliku z rozszerzeniem do .py
  • Jeśli nie uruchomi się w systemach linuxowych wpisujemychmod +x /home/<user>/<ścieżka>/NotesCmd.py

Struktura pliku Notes.txt

Notatki można tworzyć korzystając z ulubionego edytora tekstowego.

[1] Wpis 1 [2] Wpis 2 [3] Wpis 3 @ KOMENTARZ [4] Wpis 4

Link

Github 

windows linux programowanie

Komentarze

0 nowych
sylwek3100   3 #1 13.08.2012 17:26

Nie lepiej picklować dane zamiast czystym tekstem zapisywać? Przecież większa wygoda operacji jest

Autor edytował komentarz.
matiit   7 #2 13.08.2012 17:38

Dla takiego programiku najlepszym wyborem wg mnie byloby sqlite

kwpolska   5 #3 13.08.2012 20:27

a teraz racz dodac do pypi, wraz z setup.py.

iluzion   5 #4 13.08.2012 21:09

Ok, ale:

Ad.1 ### ::FUNCTION" :: ###

Po co to coś?

Ad. 2 def NumberOfLine(): #Number of line

Nazwy funkcji wg konwencji dobrze jest zapisywać małymi literami w ten sposób: number_of_lines(), a opis funkcji umieścić pod nią w postaci ciągu dokumentacyjnego """Numer of lines""".

Ad. 3 f.close()

Po co to, skoro korzystasz z menedżera kontekstu with? Zgodnie z dokumentacją:

"""
It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way. It is also much shorter than writing equivalent try-finally blocks:

>>> with open('/tmp/workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
"""

Ad 4. while(choice != "Q")

Po co te nawiasy? Nawyk po C++? ;)

Ad 5. if(choice == "A" or choice == "a")

J.w. Można zapisać np. if choice.lower() == 'a'

Wpis może porywający nie jest, ale gratuluję wyboru języka ;)

Demagog   4 #5 14.08.2012 13:23

Dzięki za życzliwe i konstruktywne komentarze.
To może po kolei.
1. Pickle - niestety moja wiedza, chyba tam jeszcze nie dotarła. Choć obija mi się po czaszce.
2. Na pomysł użycia sqlite wpadłem dopiero po ukończeniu. Możliwe, że pojawi się w aplikacji gui.
3. Na zrobienie setup.py z prawdziwego zdarzenia czas i ochoty zbrakło
4.
a) Bo tak :)
b) Dobrze wiedzieć zaraz przerobie
c) Tego nie znałem. Całe życie się człowiek uczy, a głupi umiera
d) Nawyk nie nawyk. Jakoś tak ładniej ;)
e) Patrz c)

Wpis porywający może nie jest, ale ciekawi mnie, czy pewne kwestie można zrobić ładniej, krócej i bardziej po pythonowemu.

iluzion   5 #6 14.08.2012 17:38

@Demagog

Jasne, że się da. M.in. rezygnując z ww. nawiasów, rozdzielając separatory np. + za pomocą spacji, stosując wcięcia zgodnie z konwencją (4 spacje). Oczywiście są to tylko kwestie umowne, ale opisane w PEP-8.

http://www.python.org/dev/peps/pep-0008/

Polecam lekturę. Jest to pozycja obowiązkowa każdego Pythonisty. Pozdrawiam.

iluzion   5 #7 14.08.2012 17:40

Edit: "rozdzielając operatory" powinno być;)

Saskatchewan   7 #8 15.08.2012 12:19

@iluzion: Już od ponad dwóch miesięcy mamy na DP możliwość edycji komentarzy. ;) Patrz: ikonka w prawym górnym rogu komentarza.

Edycja: Nawet działa.

Autor edytował komentarz.
Demagog   4 #9 15.08.2012 19:42

Kod zmieniony w większości zgodnie z radami. Ramki z # sobie zatrzymam. Wielkie dzięki. Jak tylko urodzi się GUI postaram się je przedstawić tutaj.