Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 4 Μήνες πριν #3318

  • Vasilis96
  • Το Άβαταρ του/της Vasilis96
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 3
ΕΧΩ ΜΙΑ ΑΣΚΗΣΗ ΠΟΥ ΖΗΤΑ ΝΑ ΦΤΙΑΞΟΥΜΕ ΤΟ ΠΑΙΧΝΙΔΙ ΤΗΣ ΚΡΕΜΑΛΑΣ.ΜΑΣ ΔΙΝΕΤΑΙ ΕΝΑ ΑΡΧΕΙΟ WORDS.TXT ΠΟΥ ΠΕΡΙΕΧΕΙ ΚΑΠΟΙΕΣ ΛΕΞΕΙΣ ΑΠΟ ΤΟ Α ΕΩΣ ΤΟ W.ΑΥΤΟ ΠΟΥ ΔΕΝ ΓΝΩΡΙΖΩ ΠΩΣ ΝΑ ΚΑΝΩ ΕΙΝΑΙ ΑΡΧΙΚΑ ΝΑ ΚΑΝΩ ΕΙΣΑΓΩΓΗ ΤΟΥ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ ΚΑΙ ΣΕ ΔΕΥΤΕΡΟ ΧΡΟΝΟ ΜΕ ΠΟΙΟ ΤΡΟΠΟ ΘΑ ΤΣΕΚΑΡΩ ΕΝΑΝ Η ΛΕΞΗ ΠΟΥ ΔΙΝΕΤΑΙ ΚΑΘΕ ΦΟΡΑ ΑΠΟ ΤΟ ΧΡΗΣΤΗ ΑΝΗΚΕΙ ΣΤΗ ΛΙΣΤΑ...ΘΑ ΗΘΕΛΑ ΤΗ ΒΟΗΘΕΙΑ ΣΑΣ ΛΟΙΠΟΝ ΠΑΝΩ ΣΕ ΑΥΤΑ ΤΑ ΔΥΟ ΖΗΤΗΜΑΤΑ
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 4 Μήνες πριν #3323

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Για το πρώτο:

>>> import os
>>> mylist = []
>>> fh = open('words.txt', 'r')
>>> data = fh.read()
>>> for line in data.split(os.linesep):
	mylist.append(line)

Για το δεύτερο:

>>> userword = 'django_res.pdf'
>>> result = userword in mylist
>>> result
True


ΥΓ: Σε παρακαλώ μην γράφεις με κεφαλαίους χαρακτήρες. Δείχνει ότι φωνάζεις.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": Vasilis96

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 4 Μήνες πριν #3334

  • Vasilis96
  • Το Άβαταρ του/της Vasilis96
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 3
Kamar σε ευχαριστώ πολύ για την απάντηση,η αλήθεια όμως είναι ότι δεν πολυκαταλαβαίνω ακριβώς τον τρόπο που χρησιμοποιείς...Αν είναι εύκολο θα ήθελα να μου τον εξηγήσεις λίγο και για τις δύο περιπτώσεις :)
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 4 Μήνες πριν #3335

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Γραμμή προς γραμμή:

import os
Εισάγουμε το άρθρωμα os που περιέχει συναρτήσεις σχετικές με το λειτουργικό σύστημα.
Απ' εδώ θα χρησιμοποιήσουμε τη συνάρτηση linesep (διαχωριστικό γραμμής).

mylist = []
Δηλώνουμε τη λίστα μας· κενή για αρχή.

fh = open('words.txt', 'r')
Δημιουργούμε ένα χειριστή αρχείου, ανοίγοντας το αρχείο για ανάγνωση.

data = fh.read()
Διαβάζουμε το αρχείο και το αποθηκεύουμε σε μια μεταβλητή data.
Το αρχείο δεν έχει διαχωριστεί σε γραμμές.

for line in data.split(os.linesep):
    mylist.append(line)
Η πρώτη γραμμή ξεκινά ένα for loop, διαβάζοντας τα δεδομένα γραμμή ανά γραμμή. Παρατήρησε ότι χρησιμοποιούμε το os.linesep για να γίνει διαχωρισμός σε γραμμές. Εδώ να εξηγήσω ότι κάθε λειτουργικό σύστημα χρησιμοποιεί διαφορετικό αναγνωριστικό για τις γραμμές ενός αρχείου. Στο linux - unix χρησιμοποιείται το '\n', στο mac το '\r' και στα windows το '\r\n'.
Η μεταβλητή line αποθηκεύει προσωρινά την κάθε γραμμή, για να την προσθέσουμε στη λίστα μας με τη μέθοδο append.

Για τα παραπάνω υποθέτω ότι στο αρχείο words.txt, κάθε γραμμή περιέχει μια λέξη.
Αν για παράδειγμα, οι λέξεις του αρχείου είναι χωρισμένες με κενό διάστημα, δεν μας χειάζεται το άρθρωμα os, ούτε η συνάρτηση linesep. Απλώς η πρώτη γραμμή του for γίνεται:
for line in data.split(" ")

Για το δεύτερο μέρος επανέρχομαι με άλλη ανάρτηση.

EDIT
Το παράδειγμα είναι ελλιπές. Δεν έχω κλείσει το αρχείο που άνοιξα.
Γράφω σε Python 3
Τελευταία διόρθωση: 8 Χρόνια 4 Μήνες πριν από kamar. Αιτία: Προσθήκη κειμένου
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 4 Μήνες πριν #3336

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Το δεύτερο είναι απλό.

Αποθηκεύουμε τη λέξη που έδωσε ο χρήστης σε μια μεταβλητή userword.
Κατόπιν ψάχνουμε τη λίστα mylist, αν περιέχει τη λέξη που έδωσε ο χρήστης και το αποτέλεσμα (True ή False) το αποθηκεύουμε σε μια μεταβλητή result.

Κατόπιν με ένα if else, δίνει το μήνυμα που θέλεις, ανάλογα με το αν η μεταβλητή είναι αληθής ή ψευδής.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": Vasilis96

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 4 Μήνες πριν #3337

  • Vasilis96
  • Το Άβαταρ του/της Vasilis96
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 3
Το django_res.pdf είναι το αντίστοιχο words.txt το δικό μου?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 4 Μήνες πριν #3338

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Το παράδειγμα μου, μάλλον είναι ατυχές. Όχι, είναι η είσοδος του χρήστη, δηλαδή η λέξη.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 3 Μήνες πριν #3352

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Λοιπόν είναι πολύ απλό. Εφόσον σε έχουν πει να κάνεις το παιχνίδι κρεμάλα και να διαβάζεις τις λέξεις που θα μαντεύει ο χρήστης από ένα αρχείο πρέπει να σκεφτείς τα εξής:

1) Η κάθε λέξη στο αρχείο θα βρίσκεται σε διαφορετική γραμμή έτσι ώστε να μπορείς να τις διαβάσεις
πολύ εύκολα με τον τρόπο που θα σε δείξω.

Τα υπόλοιπα θα τα πούμε ποιο μετά. Πες τώρα ότι έχεις το εξής αρχείο λέξεις.txt:
γαλα
πετρα
λακουβα
καραμελα
αγγελαδα
καραγκιοζης
σκαντζoχοιρος

Όπως βλέπεις η κάθε λέξη χωρίζεται με αλλαγή γραμμής και θα καταλάβεις αργότερα γιατί αυτό
είναι σημαντικό!

Πάμε τώρα στον κώδικα:
file = open("Λέξεις.txt", 'r') #Άνοιγμα αρχείου.
 
myWords = [] #Δημιουργία κενής λίστας.
 
 
#Αυτο το loop διαβάζει μία μία όλες
#τις γραμμές του αρχείου, αφαιρεί
#τον χαρακτήρα new line '\n' και στην
#συνέχεια προσθέτει την κάθε γραμμή
#σε μια λίστα.
for line in file.readlines():
 
    line = line.replace("\n", "") #Αφαιρώ την χαρακτήρα new line '\n' από την συγκεκριμένη γραμμή.
    myWords.append(line) #Προσθέτω την συγκεκριμένη γραμμή στην λίστα μου.

Αν πρόσθεσης και μια τελευταία εντολή
print(myWords)
θα δεις την εξής έξοδο:
['γαλα', 'πετρα', 'λακουβα', 'καραμελα', 'αγγελαδα', 'καραγκιοζης', 'σκαντζοχοιρος']

που σημαίνει ότι επιτυχώς διάβασα τις λέξεις από το αρχείο και τις αποθήκευσα μέσα σε μια λίστα
και τώρα μπορώ να τις κάνω ότι θέλω!

Πάμε τώρα γραμμή προς γραμμή να δούμε πως δουλεύει αυτό!

Εδώ απλός ανοίγω το αρχείο ώστε να διαβάσω συμβολοσειρές!
file = open("Λέξεις.txt", 'r') #Άνοιγμα αρχείου.

Εδώ απλός δημιουργώ μια άδεια λίστα για να μπορέσω αργότερα να
προσθέσω σε αυτήν δεδομένα.
myWords = [] #Δημιουργία κενής λίστας.


Ας δούμε τώρα αναλυτικά πως συμπεριφέρεται αυτήν η επανάληψη!
for line in file.readlines():
 
    line = line.replace("\n", "")
    myWords.append(line) 

Προτού συνεχίσουμε θα ήθελα να σε εξηγήσω την κάνει το
file.readlines()
.
Αυτήν η μέθοδος readlines() επιστρέφει μια λίστα με όλες τις
γραμμές που υπάρχουν στο αρχείο μας. Στο συγκεκριμένο αρχείο, η λίστα μας θα ήταν αυτή:
['γαλα\n', 'πετρα\n', 'λακουβα\n', 'καραμελα\n', 'αγγελαδα\n', 'καραγκιοζης\n', 'σκαντζοχοιρος']

Όπως βλέπεις όμως το πρόβλημα είναι ότι διαβάζεται και ο χαρακτήρας new line κάτι το οποίο
δεν το θέλουμε διότι θα είχαμε πρόβλημα στον έλεγχο με τον χρήστη. Δηλαδή αν ο χρήστης έδινε
'γαλα' και εσύ έλεγχες 'γαλα' == 'γαλα\n' προφανώς δεν θα ήταν το ίδιο. Άρα πρέπει να
εξαφανίσω το new line από την συμβολοσειρά μου.

Για να το πετύχω αυτό "loop-άρω" στην κάθε γραμμή και της αφαιρώ τον χαρακτήρα new line.

Πάμε να δούμε πως το πετυχαίνω αυτό:

Πρώτα η μεταβλητή line = 'γαλα\n' . Στην συνέχεια αφαιρώ τον '\n' με την εντολή
line = line.replace("\n", "")
και στην συνέχεια την προσθέτω στην
λίστα μου με την εντολή
myWords.append(line)

Ξανά συνεχίζει η επανάληψη και το τώρα line = 'πετρα\n'. Ξανά γίνονται τα ίδια
πράματα και το loop συνεχίζει μέχρι και το τελευταίο στοιχείο της λίστας.

Το εξήγησα όσο καλύτερα μπορούσα. Εάν δεν το κατάλαβες τότε δεν ξέρεις τη
κάνει αυτό το loop
for line in file.readlines():
.
Εάν δεν το γνωρίζεις ρώτα με δεν είναι κακό, συνήθως οι νέοι προγραμματιστές
γνωρίζουν μόνο αυτόν τον τρόπο χρήσης της for
for i in range()
.

Μόλις το καταλάβεις αυτό τότε πες μου να συνεχίσω για το πως πρέπει να σκεφτείς και για
τα υπόλοιπα ;)
Τελευταία διόρθωση: 8 Χρόνια 3 Μήνες πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 3 Μήνες πριν #3358

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Του έλυσες την άσκηση!
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 3 Μήνες πριν #3359

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
kamar έγραψε:
Του έλυσες την άσκηση!

Βασικά του έδειξα πως να διαβάζει με έναν "ωραίο" τρόπο δεδομένα από αρχείο.
Αν δεν το ήξερε αυτό θα του έπαιρνε πολύ καιρό μέχρι να καταλάβει από μόνος
πως χρησιμοποιούνται τα αρχεία στον προγραμματισμό. Τώρα τα υπόλοιπα είναι στο
χέρι του.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 3 Μήνες πριν #3363

  • ks
  • Το Άβαταρ του/της ks
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 9
Αντι για

for line in data.split(os.linesep):

δεν μπορουμε να γραψουμε

for line in data.splitlines:

...θα ηταν λαθος;;
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

ΕΙΣΑΓΩΓΗ ΑΡΧΕΙΟΥ ΣΕ ΛΙΣΤΑ 8 Χρόνια 3 Μήνες πριν #3364

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Και βέβαια δεν είναι λάθος. Μια δοκιμή θα σε πείσει.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.425 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου