Τα πάντα για την Python

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 19 Δεκ 2013, 02:44

Tassos10 έγραψε:
Σε ευχαριστώ πολύ, αν και δεν το πολύ κατάλαβα αυτό με το with statement ( σου εξασφαλίζει δηλαδή, ότι θα κλείσει το αρχείο στο τέλος και ας ξεχάσεις αν δώσεις εσύ την εντολή; ) αλλά θα το ξαναδώ, μόλις ξεκαθαρίσω πρώτα αυτό το θέμα...

Όπως τρέχει το πρόγραμμα σου μπορεί να συμβούν διάφορα πράγματα όπως να κρασάρει ή να προκύψει οποιοδήποτε σφάλμα. Αν αυτό γίνει όσο το αρχείο είναι ανοιχτό απ' το πρόγραμμα σου, το αρχείο θα παραμείνει ανοιχτό και μετά τον τερματισμό του προγράμματος και αυτό σίγουρα δεν είναι καλό. Αυτό αντιμετωπίζεται είτε με ένα try..finally block είτε με το with statement το οποίο είναι ένας πολύ καλύτερος τρόπος να το κάνεις. Ουσιαστικά σου εξασφαλίζει ότι σε οποιαδήποτε περίπτωση το αρχείο που άνοιξες θα κλείσει κανονικά.

Tassos10 έγραψε:
Όσο για αυτό που λέω, για την σειριακή επεξεργασία, είναι να θέλω να ανοίγω π.χ. το αρχείο και να ψάχνω ένα ένα τα στοιχεία που έχει μέσα,
π.χ. να βλέπω αν τα στοιχεία που έχει μέσα είναι διατεταγμένα σε αύξουσα σειρά ( αν υπάρχουν ). σε ποια θέση είναι το τάδε στοιχείο ( αν υπάρχει ), να μου δίνει το στοιχείο της τάδε θέσης ( αν υπάρχει), να μετράω τα στοιχεία..κτλπ..
Επεξεργασία κάθε στοιχείου που έχει μέσα το αρχείο, ένα ένα ξεχωριστά και να προχωράω στο επόμενο.

Το θέμα είναι τι εννοείς στοιχεία; Μαντεύω ότι θες να διαβάσεις αρχεία που έχουν συγκεκριμένη μορφή ή ακολουθούνται κάποια μοτίβα σ' αυτά. Ανάλογα την περίπτωση θα κάνεις διαφορετικούς χειρισμούς. Πχ. μπορείς να διαβάζεις το αρχείο γραμμή, γραμμή και έτσι να τερματίζεις την διαδικασία όποτε το θέλεις εσύ.

Διάβασε όλο το κεφάλαιο files στο dive into python αν θες.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 19 Δεκ 2013, 03:06

@Αγγούρι
Πρόκειται για έτοιμο project ή είναι κάτι που θα ξεκινήσεις τώρα; Αν όχι και αν δεν υπάρχουν άλλα «εμπόδια» γιατί python2 και όχι python3; Το λέω αυτό γιατί θυμάμαι να έχω φάει άπειρες ώρες προσπαθώντας να λύσω ηλίθια θέματα με τα encodings στην python2, τα οποία δεν υπάρχουν στην python3.

Σχετικά με αυτό που ρωτάς δεν θυμάμαι και δεν μου ρχεται αυτή τη στιγμή πως μπορεί να διορθωθεί, αλλά θα πάρεις πολύ γρήγορα απάντηση αν κάνεις την ίδια ερώτηση σε κάποιο site σαν το stackoverflow, αν δεν υπάρξει φυσικά απάντηση από άλλο μέλος.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Tassos10 » 19 Δεκ 2013, 09:14

Ilias95 έγραψε:Όπως τρέχει το πρόγραμμα σου μπορεί να συμβούν διάφορα πράγματα όπως να κρασάρει ή να προκύψει οποιοδήποτε σφάλμα. Αν αυτό γίνει όσο το αρχείο είναι ανοιχτό απ' το πρόγραμμα σου, το αρχείο θα παραμείνει ανοιχτό και μετά τον τερματισμό του προγράμματος και αυτό σίγουρα δεν είναι καλό. Αυτό αντιμετωπίζεται είτε με ένα try..finally block είτε με το with statement το οποίο είναι ένας πολύ καλύτερος τρόπος να το κάνεις. Ουσιαστικά σου εξασφαλίζει ότι σε οποιαδήποτε περίπτωση το αρχείο που άνοιξες θα κλείσει κανονικά.


Μάλιστα ωραία, έχεις δίκιο σε αυτό. και σε ευχαριστώ πάρα πολύ, η σύνταξη δηλαδή είναι :

Μορφοποιημένος Κώδικας: Επιλογή όλων
with open ("text.txt", "w", encoding='utf8') as file:
file.write("ubuntu-gr.org")
.
..
...

Χωρίς να βάλω στο τέλος file.close() , με το που τελειώσει το block θα κλείνει;

Ilias95 έγραψε:Το θέμα είναι τι εννοείς στοιχεία; Μαντεύω ότι θες να διαβάσεις αρχεία που έχουν συγκεκριμένη μορφή ή ακολουθούνται κάποια μοτίβα σ' αυτά. Ανάλογα την περίπτωση θα κάνεις διαφορετικούς χειρισμούς. Πχ. μπορείς να διαβάζεις το αρχείο γραμμή, γραμμή και έτσι να τερματίζεις την διαδικασία όποτε το θέλεις εσύ.

Διάβασε όλο το κεφάλαιο files στο dive into python αν θες.


Ωραία, να διαβάζω το αρχείο στοιχείο, στοιχείο; Δηλαδή, πες πως έχω ένα αρχείο με μόνο αριθμούς ( ακέραιους π.χ. ), και να θέλω να προσθέτω κάθε φορά τον προηγούμενο αριθμό με τον επόμενο και στο τέλος να αφήσω μόνο το άθροισμα τους, ή π.χ. να θέλω να βρω μέσα στο αρχείο ακεραίων σε ποια θέση, είναι το νούμερο 5 :P ( να πρέπει δηλαδή ο αλγόριθμος μου να διαβάσει όλους του αριθμούς έναν έναν μέχρι το 5 ) και να έχω ένα μετρητή όπου αυτός στο τέλος θα μου λέει και την θέση.



Αν και εγώ είμαι της python 3, αν βάλεις encoding utf8 δε διορθώνεται ;
kamar έγραψε:Μια βασική παράμετρος είναι το encoding, που πρέπει να δηλώνεται utf8, ειδικά αν γράφεις και για windows.
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-50-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.2.0-49-generic
3 Intel Core2 Quad CPU Q9400 2.66GHz ‖ RAM 3954 MiB ‖ ASRock G31M-S
4 nVidia G92 [GeForce 9800 GT] [10de:0614] {nvidia}
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02)
Tassos10
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 472
Εγγραφή: 29 Μαρ 2010, 10:43
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 19 Δεκ 2013, 15:04

Tassos10 έγραψε:
Χωρίς να βάλω στο τέλος file.close() , με το που τελειώσει το block θα κλείνει;

Ακριβώς. Μια μικρή παρατήρηση μόνο, μη χρησιμοποιείς το όνομα file σαν μεταβλητή γιατί στην python2 χρησιμοποιείται ήδη και μπορεί να σου δημιουργήσει προβλήματα.

Tassos10 έγραψε:Ωραία, να διαβάζω το αρχείο στοιχείο, στοιχείο; Δηλαδή, πες πως έχω ένα αρχείο με μόνο αριθμούς ( ακέραιους π.χ. ), και να θέλω να προσθέτω κάθε φορά τον προηγούμενο αριθμό με τον επόμενο και στο τέλος να αφήσω μόνο το άθροισμα τους

Σου ξαναλέω έχεις μια συγκεκριμένη δομή στο μυαλό σου αλλά δεν μας την λες. Ωραία έχεις ένα αρχείο που περιέχει μόνο αριθμούς. Αλλά πως είναι;

Είναι έτσι;
Κώδικας: Επιλογή όλων
4
43
54
563
...

είναι έτσι;
Κώδικας: Επιλογή όλων
4 43 54 563....

μήπως είναι έτσι;
Κώδικας: Επιλογή όλων
4 43 54
563 1082
33 67 42 89
....
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Tassos10 » 13 Ιαν 2014, 10:35

Δε παίζει ρόλο η μορφή, απλώς πως μπορώ να βρω την θέση του 43 π.χ.;
Πως μπορώ να διαβάσω ( με ποια εντολή ), ένα ένα τα στοιχεία του αρχείου;
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-50-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.2.0-49-generic
3 Intel Core2 Quad CPU Q9400 2.66GHz ‖ RAM 3954 MiB ‖ ASRock G31M-S
4 nVidia G92 [GeForce 9800 GT] [10de:0614] {nvidia}
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02)
Tassos10
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 472
Εγγραφή: 29 Μαρ 2010, 10:43
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό kamar » 13 Ιαν 2014, 13:00

Όπως γράφει ο Ilias95, πρέπει να ξεκαθαρίσεις τι μορφή θα έχουν οι εγγραφές του αρχείου σου. Μετά μπορούμε να βοηθήσουμε να βρεις αυτό που θέλεις.

Αλλιώς θα προσπελάσεις ένα αρχείο της μορφής:
Κώδικας: Επιλογή όλων
4
43
54
563
...

Και αλλιώς ένα αρχείο με τη μορφή:
Κώδικας: Επιλογή όλων
4 43 54
563 1082
33 67 42 89
....


Στο πρώτο παράδειγμα απλώς διαβάζεις μια γραμμή και συγκρίνεις το αποτέλεσμα.
Στο δεύτερο παράδειγμα διαβάζεις μια γραμμή και κατόπιν διαβάζεις και συγκρίνεις το αποτέλεσμα από τα περιεχόμενα της γραμμής.
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 14.04 trusty 3.13.0-91-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD A6-5400K APU with Radeon HD Graphics ‖ RAM 3347 MiB ‖ ASUS F2A55-M LK2 PLUS
4 Advanced Micro Devices, Inc. [AMD/ATI] Trinity [Radeon HD 7540D] [1002:9991] {radeon}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 09)
Άβαταρ μέλους
kamar
punkTUX
punkTUX
 
Δημοσιεύσεις: 166
Εγγραφή: 10 Μάιος 2008, 20:24
Τοποθεσία: Χανιά
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Tassos10 » 15 Ιαν 2014, 11:44

Θέλω να κάνω σειριακή επεξεργασία ( ένα ένα τα αντικείμενα του αρχείου..εγγραφή, ανάγνωση...κτλπ ) των δεδομένων του αρχείου, ανεξάρτητα από την μορφή τους.
Αν δεν ξέρουμε την μορφή του κειμένου ενός αρχείου, με την python δε μπορούμε να δουλέψουμε δηλαδή;
Anyway, για να μην σας παιδεύω, αν μπορείτε πείτε μου έστω και για τις δύο μορφές ( κάθετη και οριζόντια ) πως τις δουλεύεις στην python.
Σας ευχαριστώ πολύ! :)
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-50-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.2.0-49-generic
3 Intel Core2 Quad CPU Q9400 2.66GHz ‖ RAM 3954 MiB ‖ ASRock G31M-S
4 nVidia G92 [GeForce 9800 GT] [10de:0614] {nvidia}
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02)
Tassos10
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 472
Εγγραφή: 29 Μαρ 2010, 10:43
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό kamar » 15 Ιαν 2014, 12:43

Αυτό είναι ένας τρόπος για να κάνεις επεξεργασία:

Κώδικας: Επιλογή όλων
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Filename: search_file.py

file_to_search = '../apodixispro_postgresql/epixirisis.txt' # Το αρχείο που θα ψάξω. Βάζεις το δικό σου.

def find_in_file():
f = "Α' ΧΑΝΙΩΝ" # Τι ψάχνω.
matches = [] # Εδώ αποθηκεύω τα αποτελέσματα.

with open(file_to_search, encoding='utf8') as fh: # Ανοίγω το αρχείο.
for i, line in enumerate(fh): # Ψάχνω μια - μια γραμμή. Δίνω τον αριθμό γραμμής με την enumerate. (Δες τεκμηρίωση).
if line.find(f) != -1: # Προσθέτω στον πίνακα matches, αυτό που βρήκα. (-1 = Δεν βρήκα). (Δες τεκμηρίωση)
matches.append((i, line.find(f), line[line.find(f):line.find(f)+len(f)])) # Αριθμός γραμμής, θέση του στοιχείου, το στοιχείο.

print(len(matches)) # Αριθμός ευρεθέντων.
## for item in matches: # Αφαίρεσε τα '##' αν θέλεις να τυπωθούν
## print(item) # τα αποτελέσματα.

if __name__ == '__main__':
find_in_file()


Για πιο σύνθετες αναζητήσεις χρησιμοποίησε την re.
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 14.04 trusty 3.13.0-91-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD A6-5400K APU with Radeon HD Graphics ‖ RAM 3347 MiB ‖ ASUS F2A55-M LK2 PLUS
4 Advanced Micro Devices, Inc. [AMD/ATI] Trinity [Radeon HD 7540D] [1002:9991] {radeon}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 09)
Άβαταρ μέλους
kamar
punkTUX
punkTUX
 
Δημοσιεύσεις: 166
Εγγραφή: 10 Μάιος 2008, 20:24
Τοποθεσία: Χανιά
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Tassos10 » 11 Φεβ 2014, 19:27

Μπορείτε να μου πείτε και εσείς μερικές πληροφορίες για το socket και πως να το χρησιμοποιώ σε python 3 ;
Ευχαριστώ πολύ! :)
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-50-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.2.0-49-generic
3 Intel Core2 Quad CPU Q9400 2.66GHz ‖ RAM 3954 MiB ‖ ASRock G31M-S
4 nVidia G92 [GeForce 9800 GT] [10de:0614] {nvidia}
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02)
Tassos10
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 472
Εγγραφή: 29 Μαρ 2010, 10:43
Εκτύπωση

Νέος στον προγραμματισμό-ξεκινάω με python 3

Δημοσίευσηαπό kostaspd » 12 Μαρ 2014, 21:12

Είμαι ο Κώστας, 34 ετών και μόλις έχω πάρει την απόφαση να ξεκινήσω προγραμματισμό από το μηδέν ως χόμπυ και όπου με βγάλει... Δεν θα σας κουράσω με ερωτήσεις του στυλ ποια γλώσσα να επιλέξω??? Έχω ήδη επιλέξει την python 3 και για αρχή διαβάζω το a_byte_of_python-el.pdf στο οποίο γίνονται πολλές αναφορές για το ubuntu.gr...

Είμαι στις πρώτες σελίδες ακόμα και τα λειτουργικά που έχω στην διάθεση μου αυτή την στιγμή στο laptop μου είναι windows 7 και τρέχω σε virtual box το arch Linux και πρέπει να πω ότι είμαι αρχάριος και στο Linux, αλλά κάποια βασικά πράγματα τα γνωρίζω....

Σαν επεξεργαστή κειμένου χρησιμοποιώ τον gvim στο arch Linux και τον IDLE στα windows 7.... Να σημειώσω ότι τα αγγλικά μου είναι σε ικανοποιητικό επίπεδο αν τυχόν θελήσετε να μου προτείνετε ξένη βιβλιογραφία...

Σαν βοήθεια εκτός από το ubuntu.gr συμβουλεύομαι και ποστάρω στο adslgr.com και στο python.org.gr....

Το θέμα αυτό το ανοίγω(αν το εγκρίνετε) για να παρακολουθώ την πρόοδο μου, να ποστάρω τις απορίες μου και φυσικά να παίρνω την βοήθεια σας.... Όποιος ενδιαφέρεται μπορεί να ποστάρει ότι σχετικό θέλει να πει....

Ευχαριστώ πολύ και καλώς σας βρήκα.... :geek:
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Ικανοποιητικό
2 ubuntu 14.04 64bit
3 AMD A6-4400M APU with Radeon HD Graphics ‖ RAM 2766 MiB ‖ Hewlett-Packard 184A - HP Pavilion g6 Notebook PC
4 AMD nee ATI Device [1002:9990] ⋮ AMD nee ATI Thames XT/GL [Radeon HD 7600M Series] [1002:6840]
5 eth0: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 05) ⋮ wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
kostaspd
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 641
Εγγραφή: 06 Οκτ 2008, 00:34
Τοποθεσία: Κερατσίνι,Πειραιάς
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron