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

ΘΕΜΑ: Αρχείο txt

Αρχείο txt 8 Χρόνια 11 Μήνες πριν #2853

  • Foteini
  • Το Άβαταρ του/της Foteini
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 16
Καλησπέρα ακόμα μια φορά!Εχω την εξής απορία:θέλω από ένα αρχείο txt να πάρω μια τιμή και να τη βάλω σε λίστα.Το αρχείο είναι το εξης
AVRGE_1 = 8.16981506E+01 / Avg, count/s in interval
FREXP_1 = 3.40000004E-01 / Avg. Frac exposure in frame
VAROB_1 = 6.35939445E+01 / observed variance
VAREX_1 = 4.46972519E-01 / expected variance
THRDM_1 = -6.10887512E+02 / third moment
MININ_1 = 4.37927246E+01 / CHI2_E1 = 1.15758371E+01 / Error Chi2
RMS_E1 = 8.46203603E-03 / RMS variability

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

Εχω κάνει λοιπόν:

f=open('team2.txt')
lines=f.readlines()
print lines[1]

Αυτο όμως μου δίνει
AVRGE_1 = 8.16981506E+01 / Avg, count/s in interval
Πώς μπορώ να απομονώσω τον αριθμό σε μια λίστα για να δουλέψω με αυτόν?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αρχείο txt 8 Χρόνια 11 Μήνες πριν #2854

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Κατ' αρχάς, είμαι αρχάριος στον προγραμματισμό γενικά, οπότε αν πάω μέσω Λαμίας δείξε κατανόηση.
Με αυτόν τον τρόπο (με Regular expressions)

import re
numbers = []
with open('team2.txt') as f:
    lines = f.readlines()
    for line in lines:
        data = re.search(r'= (.){1,15} /', line).group()
        number = data[2:-2]
        numbers.append(float(number))
print(numbers)

σχεδόν δουλεύει...
Υπάρχει όμως πρόβλημα στην 6η σειρά, επειδή έχει άλλη μορφοποίηση.
Αν αντί για:
MININ_1 = 4.37927246E+01 / CHI2_E1 = 1.15758371E+01 / Error Chi2
ήταν:
MININ_1 = 4.37927246E+01 /
CHI2_E1 = 1.15758371E+01 / Error Chi2
θα έπαιρνα και τα 2 νούμερα, αλλά δυστυχώς...

Ακόμα και έτσι όμως τα νούμερα που παίρνω είναι:
[81.6981506, 0.340000004, 63.5939445, 0.446972519, -610.887512, 43.7927246, 0.00846203603]
Είναι σωστά ή κουκουρούκου? (είμαι άσχετος από μαθηματικά)

Σίγουρα γίνεται καλύτερα με τα Regular expressions αλλά δεν τα ξέρω καλά.

Edit: Υπέθεσα ότι θέλεις float γιαυτό τα μετέτρεψα.
Αν θέλεις απλώς το String (π.χ. 8.16981506E+01) κάνε το numbers.append(float(number)) numbers.append(number)

Edit2: Ο μόνος τρόπος που σκέφτηκα για να πάρεις όλα τα νούμερα είναι να βάλεις και ένα try - except που να ψάχνει και το δεύτερο μέρος, αν υπάρχει.
import re
numbers = []
with open('team2.txt') as f:
    lines = f.readlines()
    for line in lines:
        data = re.search(r'= (.){1,15} /', line).group()
        number = data[2:-2]
        numbers.append(float(number))
        try:
            part_2 = line[26:]
            data = re.search(r'= (.){1,15} /', part_2).group()
            number = data[2:-2]
            numbers.append(float(number))
        except AttributeError:
            pass
print(numbers)

Αυτά...
Τελευταία διόρθωση: 8 Χρόνια 11 Μήνες πριν από embryo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αρχείο txt 8 Χρόνια 11 Μήνες πριν #2859

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Ένα από τα παρακάτω πρέπει να σου κάνει:
import re
txt = """AVRGE_1 = 8.16981506E+01 / Avg, count/s in interval
FREXP_1 = 3.40000004E-01 / Avg. Frac exposure in frame
VAROB_1 = 6.35939445E+01 / observed variance
VAREX_1 = 4.46972519E-01 / expected variance
THRDM_1 = -6.10887512E+02 / third moment
MININ_1 = 4.37927246E+01 / CHI2_E1 = 1.15758371E+01 / Error Chi2
RMS_E1 = 8.46203603E-03 / RMS variability"""
 
search_string = "-{0,1}\d+\.\d+E[+|-]\d+"
for item in re.findall(search_string, txt):
    print(item)

import re
txt = """AVRGE_1 = 8.16981506E+01 / Avg, count/s in interval
FREXP_1 = 3.40000004E-01 / Avg. Frac exposure in frame
VAROB_1 = 6.35939445E+01 / observed variance
VAREX_1 = 4.46972519E-01 / expected variance
THRDM_1 = -6.10887512E+02 / third moment
MININ_1 = 4.37927246E+01 / CHI2_E1 = 1.15758371E+01 / Error Chi2
RMS_E1 = 8.46203603E-03 / RMS variability"""
 
search_string = "-{0,1}\d+\.\d+E[+|-]\d+"
item = re.search(search_string, txt).group()
print(item)
Γράφω σε Python 3
Τελευταία διόρθωση: 8 Χρόνια 11 Μήνες πριν από kamar. Αιτία: Διόρθωση του κώδικα
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αρχείο txt 8 Χρόνια 11 Μήνες πριν #2861

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

Για παράδειγμα:
Σε όλα σου τα lines o αριθμός σου βρίσκεται ανάμεσα στους
χαρακτήρες = και + ή - (αν θεωρείς ότι ο αριθμός σου είναι
ο 8.16981506E, αν όμως είναι ο 8.16981506E+01 τότε βρίσκεται
ανάμεσα στους χαρακτήρες = και /).

Ας πάρουμε ως παράδειγμα αυτό:
AVRGE_1 = 8.16981506E+01 / Avg

Λυπών την θα μπορούσες να κάνεις για να πάρεις όλους τους
χαρακτήρες που σχηματίζουν τον αριθμό 8.16981506E?
θα μπορούσες να κάνεις έναν αλγόριθμο ο οποίος να μπορεί να προσπελάσει όλους τους χαρακτήρες του string AVRGE_1 = 8.16981506E+01 / Avg και να κρατάει μόνο αυτούς που είναι
ανάμεσα στους χαρακτήρες = και + ή -.

Δες έναν κώδικα που δουλεύει με αυτήν την λογική.
string = lines[1] #AVRGE_1 = 8.16981506E+01 / Avg
 
#Δημιουργία μιας λίστας που περιέχει όλους τους χαρακτήρες του string.
#Αυτό το κάνω για να μπορέσω να προσπελάσω όλους τους χαρακτήρες.
list_string = list(string)
 
number_string = ""
flag = ""
 
for i in range( len(list_string) ):
 
    #Βλέπω αν έφτασα τον χαρακτήρα =.
    if list_string[i] == "=":
        flag = 'start' #Αλλάζω την τιμή του flag.
        continue
 
    #Βλέπω αν έφτασα τον χαρακτήρα + ή -.
    elif list_string[i] == "+" or list_string[i] == '-':
        flag = 'stop'
        break
 
    #Αρχίζω να δημιουργό τον αριθμό μου.
    if flag == 'start':
        number_string += list_string[i]
        pass
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αρχείο txt 8 Χρόνια 11 Μήνες πριν #2864

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
babaliaris1 έγραψε:
Εγώ θα σου πρότεινα να κάνεις έναν απλό αλγόριθμο ο οποίος θα
ξεχωρίζει ποιος είναι ο αριθμός μέσα στο string σου.

Για παράδειγμα:
Σε όλα σου τα lines o αριθμός σου βρίσκεται ανάμεσα στους
χαρακτήρες = και + ή - (αν θεωρείς ότι ο αριθμός σου είναι
ο 8.16981506E, αν όμως είναι ο 8.16981506E+01 τότε βρίσκεται
ανάμεσα στους χαρακτήρες = και /).

Ας πάρουμε ως παράδειγμα αυτό:
AVRGE_1 = 8.16981506E+01 / Avg

Λυπών την θα μπορούσες να κάνεις για να πάρεις όλους τους
χαρακτήρες που σχηματίζουν τον αριθμό 8.16981506E?
θα μπορούσες να κάνεις έναν αλγόριθμο ο οποίος να μπορεί να προσπελάσει όλους τους χαρακτήρες του string AVRGE_1 = 8.16981506E+01 / Avg και να κρατάει μόνο αυτούς που είναι
ανάμεσα στους χαρακτήρες = και + ή -.

Δες έναν κώδικα που δουλεύει με αυτήν την λογική.
string = lines[1] #AVRGE_1 = 8.16981506E+01 / Avg
 
#Δημιουργία μιας λίστας που περιέχει όλους τους χαρακτήρες του string.
#Αυτό το κάνω για να μπορέσω να προσπελάσω όλους τους χαρακτήρες.
list_string = list(string)
 
number_string = ""
flag = ""
 
for i in range( len(list_string) ):
 
    #Βλέπω αν έφτασα τον χαρακτήρα =.
    if list_string[i] == "=":
        flag = 'start' #Αλλάζω την τιμή του flag.
        continue
 
    #Βλέπω αν έφτασα τον χαρακτήρα + ή -.
    elif list_string[i] == "+" or list_string[i] == '-':
        flag = 'stop'
        break
 
    #Αρχίζω να δημιουργό τον αριθμό μου.
    if flag == 'start':
        number_string += list_string[i]
        pass

Σου ξέφυγε ότι υπάρχει πιθανότητα ο αριθμός να είναι αρνητικός.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αρχείο txt 8 Χρόνια 11 Μήνες πριν #2867

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

Ναι δίκαιο έχεις. Απλός χρειάζεται μία επιπλέον if η οποία
μετά το = να ελέγχει αν υπάρχει το -. :P
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αρχείο txt 8 Χρόνια 11 Μήνες πριν #2880

  • Tassos
  • Το Άβαταρ του/της Tassos
  • Αποσυνδεμένος
  • pyth__
  • g-lts.info
  • Δημοσιεύσεις: 78
  • Ληφθείσες Ευχαριστίες 5
Αν κάνει split στην γραμμή & έπειτα κρατήσει το "κομμάτι" που θέλει ;
Ομάδα Ελληνικής - Μακροχρόνιας υποστήριξη.

Greek - Long Term Support Team.

Επισκεφθείτε μας εδώ : g-lts.info
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.337 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

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