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

ΘΕΜΑ: Αφαιρεση σχόλιων με # από αρχείο python.ειναι σωστός ο κώδικ;

Αφαιρεση σχόλιων με # από αρχείο python.ειναι σωστός ο κώδικ; 5 Χρόνια 9 Μήνες πριν #5251

  • stylkal
  • Το Άβαταρ του/της stylkal
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 4
:dry:
def filterfile (oldFile,newFile):
f1=open(testing.py, 'r')
f2=open(newf.py, 'w')
while True:
tetx=f1.readline()
if text== ":
break
if text[0]=='#'
continue
f2.write(text)

f1.close()
f2.close()
:dry:
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αφαιρεση σχόλιων με # από αρχείο python.ειναι σωστός ο κώδικ; 5 Χρόνια 9 Μήνες πριν #5252

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Αν όλα τα σχόλια ξεκινάν από το 0 θα είναι εντάξει.
Εάν όμως έχει σχόλια μετά δεν θα τα αφαιρέσει.

Μία λύση είναι να ψαξεις για το # και να σβήσεις ότι έχει μετά. Θέλει όμως προσοχή γιατί εάν το # είναι μέσα σε string literal τότε είναι κομμάτι του string και όχι εισαγωγή σχολίου.
message1 = 'μετά από το str ξεκινάει το σχόλιο'#αυτό είναι σχόλιο
message2 = "#αυτό δεν είναι σχόλιο"
message3 = '#ούτε αυτό είναι σχόλιο'
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": stylkal

Αφαιρεση σχόλιων με # από αρχείο python.ειναι σωστός ο κώδικ; 5 Χρόνια 9 Μήνες πριν #5253

  • stylkal
  • Το Άβαταρ του/της stylkal
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 4
Theo έγραψε:
Αν όλα τα σχόλια ξεκινάν από το 0 θα είναι εντάξει.
Εάν όμως έχει σχόλια μετά δεν θα τα αφαιρέσει.

Μία λύση είναι να ψαξεις για το # και να σβήσεις ότι έχει μετά. Θέλει όμως προσοχή γιατί εάν το # είναι μέσα σε string literal τότε είναι κομμάτι του string και όχι εισαγωγή σχολίου.
message1 = 'μετά από το str ξεκινάει το σχόλιο'#αυτό είναι σχόλιο
message2 = "#αυτό δεν είναι σχόλιο"
message3 = '#ούτε αυτό είναι σχόλιο'
πώς να το κάνω να μην φέυγει το # από σχόλια με " ; Μπορείτε να με βοηθήσετε;
Σας ευχαριστώ!!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αφαιρεση σχόλιων με # από αρχείο python.ειναι σωστός ο κώδικ; 5 Χρόνια 9 Μήνες πριν #5257

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
To # εντός string δεν είναι σχόλιο :P

Από εκεί και πέρα, αν αυτό είναι άσκηση, τότε κάτα πάσα πιθανότητα ο καθηγητής σας περιμένει να δει κάτι σαν αυτό που έχεις κανει και μάλλον θα αγνοήσετε το ενδεχόμενο του # εντός string. Προσωπικά θα έστελνα ένα email να ρωτήσω, γιατί το πρόβλημα είναι πιο δύσκολο από όσο ίσως φαντάζεσαι. Σκέψου ότι μπορείς να έχεις # μέσα σε nested strings, # μέσα σε multiline strings κτλ

Αν δεν είναι άσκηση, τότε ο τρόπος που λύνονται αυτά τα προβλήματα είναι μέσω Syntax Trees, οπότε πρέπει να κοιτάξεις τα:

- ast: docs.python.org/3/library/ast.html
- tokenize: docs.python.org/3/library/tokenize.html

και ίσως και κάτι σαν το redbaron: github.com/PyCQA/redbaron
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": stylkal

Αφαιρεση σχόλιων με # από αρχείο python.ειναι σωστός ο κώδικ; 5 Χρόνια 9 Μήνες πριν #5259

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Συμφωνώ με τον pmav το πρόβλημα δεν είναι και τόσο απλό.

Μία άλλη λύση πιο απλή :evil: θα μπορούσε να είναι και με regex.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αφαιρεση σχόλιων με # από αρχείο python.ειναι σωστός ο κώδικ; 5 Χρόνια 9 Μήνες πριν #5260

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Δεν νομίζω ότι το πρόβλημα λύνεται εύκολα με regexes. Το να βρεις τι είναι string και τι όχι είναι μια extreme εκδοχή του να μετράς ανοικτές/κλειστές παρενθέσεις. Σκέψου ότι υπάρχουν single & double quotes. nested quotes, triple quotes. Escaped quotes. Σκέψου ακόμα ότι το ακόλουθο πχ είναι valid
a = "\
my string"
print(a)
Τελευταία διόρθωση: 5 Χρόνια 9 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Αφαιρεση σχόλιων με # από αρχείο python.ειναι σωστός ο κώδικ; 5 Χρόνια 9 Μήνες πριν #5261

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Το δυσκολότερο κομμάτι είναι να πείστεί κάποιος να αφιερώσει λίγο από τον πολύτιμο χρόνο του :)

Δοκίμασα στο regex101.com/ literals σε διάφορους πιθανούς συνδυασμούς
Αυτό το πατερν ("{1,3}|\'{1,3}).*?\1
με αυτό το κείμενο 
 
def f(g):
    def wrapper(): #comment
	"""
	docstring " '
	"""
 
        print('i belong" to # decorator','kati\" allo')
        a= "skjf \
slkdfjlk 'j" 
        b= a+ " sdf sdf kldf kjl"
        g()
    return wrapper()
 
a = "\
my string"
print(a)
 
Δίνει 
Match 1
Full match	41-64	"""
	docstring " '
	"""
Match 2
Full match	80-106	'i belong" to # decorator'
Match 3
Full match	107-120	'kati\" allo'
Match 4
Full match	133-153	"skjf \
slkdfjlk 'j"
Match 5
Full match	169-188	" sdf sdf kldf kjl"
Match 6
Full match	227-240	"\
my string"
 
Its fucking genius ;)
αν βάλω κάτι με escape το χάνει :laugh: αλλά αυτό είναι θέμα δικής μου απειρίας.
Τελευταία διόρθωση: 5 Χρόνια 9 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.283 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

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