Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

πρεπει να γραψω ενα ενα κωδικα για να διαγραφει τις κενες γραμμες απο ενα κειμενο (.txt).εγραψα αυτο,

 

with open('C:\\Users\\Desktop\\test.txt','r') as input:

  for line in input:

    line=line.strip()

    if line !=' ':

       print(line)

 

και μεχρι εδω ειναι σωστο, αλλα αν προσπαθησω να το γραψω σε ενα .txt

 

with open('C:\\Users\\Desktop\\test.txt','r') as input:

    for line in input:

       line=line.strip()

       if line !=' ':

          with open('C:\\Users\\Desktop\\test.txt','w') as out:

             out.write(line)

 

διαγραφει ολες τις γραμμες εχτος την τελευταια. καποια βοηθεια?

Δημοσ.

Η λογική που τρέχεις δεν είναι και τόσο πρακτική.. Μπορείς να γράψεις τις γραμμές που δεν είναι κενές σε ένα άλλο txt και αφού τελειώσεις απλά διαγράφεις το παλιό και κάνεις rename το καινούργιο με το όνομα του παλιού. 

 

Επίσης ΠΑΝΤΑ πρέπει να ελέγχεις αν υπάρχει το αρχείο πριν δουλέψεις πάνω του. π.χ.

#!/usr/bin/python

## για λειτουργιες os ##
import os

## ελεγχεις αν υπαρχει το file ΠΑΝΤΑ ##
if os.path.isfile( file path ):
   ## εδω κανεις τη δουλεια σου ##
else:
   ## error msg ##

Για να φτιάξεις καινούργιο αρχείο απλά ανοίγεις ένα που δεν υπάρχει, έτσι η python θα σου φτιάξει ένα άδειο file.

 

Για να διαγράψεις ένα αρχείο κάνεις το εξής

## χρησιμοποιείς try για να πιάσεις την περιπτωση exception ##
try:
        os.remove( file )
except OSError, e:  ## αν δεν πετυχε η διαγραφη, αντι για να πεταξει exception, κανει print ενα error msg ##
        print ("Error: %s - %s." % (e.filename,e.strerror))

Τέλος για rename κάνεις το εξής (μπορείς και εδώ να έχεις try)

os.rename('oldName','newName')
Δημοσ. (επεξεργασμένο)

όταν βγαίνει ο κώδικας έξω από το intent του with το αρχείο κλείνει.
Βάλε τα with μαζί

Δεν πρόσεξα ότι χρησιμοποιείς ίδιο αρχείο για να γράψεις

πρέπει να είναι άλλο το αρχείο.

Επεξ/σία από k33theod
Δημοσ.

Τα πράγματα είναι απλά:

with open('file_in.txt', 'r') as fin, open('file_out.txt', 'w') as fo:
    fo.write(''.join([line for line in fin.readlines() if line != '\n']))

Επίσης ΠΑΝΤΑ πρέπει να ελέγχεις αν υπάρχει το αρχείο πριν δουλέψεις πάνω του. π.χ.

#!/usr/bin/python

## για λειτουργιες os ##
import os

## ελεγχεις αν υπαρχει το file ΠΑΝΤΑ ##
if os.path.isfile( file path ):
   ## εδω κανεις τη δουλεια σου ##
else:
   ## error msg ##

 

Δεν είναι αυτή η σωστή λογική στην Python. Δεν ελέγχεις αν υπάρχει το αρχείο απλά το κάνεις wrap σε try except και πιάνεις το FileNotFoundException

Δημοσ.

Τα πράγματα είναι απλά:

with open('file_in.txt', 'r') as fin, open('file_out.txt', 'w') as fo:
    fo.write(''.join([line for line in fin.readlines() if line != '\n']))

Δεν είναι αυτή η σωστή λογική στην Python. Δεν ελέγχεις αν υπάρχει το αρχείο απλά το κάνεις wrap σε try except και πιάνεις το FileNotFoundException

 

Δεν είχα καν σκοπό να μιλήσω για exceptions στον φίλο γιατί δεν ξέρω σε τι επίπεδο βρίσκεται και από ότι κατάλαβα μάλλον είναι σε ακαδημαικο. Μετά σκέφτηκα να του αναφέρω έτσι πεταχτά οτι υπάρχουν οι exceptions pretty much σε όλες τις γλώσσες που θα γράψει στη συνέχεια ώστε να αρχίσει να μπαίνει στο κλίμα. Οπότε προφανώς δεν τον έριξα με τη μια σε eafp λογική, καλύτερα να τα καταλάβει πρώτα με lbyl λογική και μετά να πάει μόνος στην eafp ξέρωντας τα προτερηματα της.

  • Like 1
Δημοσ.

Μην κουράζεσαι αδερφέ: $ grep -v '^$' input.txt > output.txt

 

χαχαχαχα αν είναι να πάει εκεί το παιδί καλύτερα να το κάνει με sed για να γλυτώσει και bus traffic. Λογικά καμια άσκηση θα είναι από τη σχολή του ή κάτι τέτοιο.

Δημοσ.

Χωρίς να ξέρω Python δοκίμασε το παρακάτω (φτιάξε το Indentation δεν έχω python compiler να το δοκιμάσω)

 

//read all the file lines

with open('C:\\Users\\Desktop\\test.txt','r') as input:

lines = input.readlines()

input.close()

//reopen file in write mode and write the not null values

with open('C:\\Users\\Desktop\\test.txt','w') as out:

for line in lines:
  if line !=' ':
   out.write(line)

out.close()

 

Αν και θεωρώ καλύτερη επιλογή να γράψεις σε ένα νέο αρχείο κατευθείαν γιατί σε μεγάλα αρχεία θα χρειάζεσαι αρκετή μνήμη με αυτό τον τρόπο. Οπότε αλλάζεις στον κώδικα που έχεις το όνομα του αρχείου του out , το μετακινείς και έξω απο την for (γιατί εκεί που το έχεις το ανοίγεις συνέχεια και πιθανόν είναι αυτό το θέμα σου) και τέλος πάντα να φροντίζεις να κλείνεις τα αρχεία

Δημοσ.

Τα πράγματα είναι απλά:

with open('file_in.txt', 'r') as fin, open('file_out.txt', 'w') as fo:
    fo.write(''.join([line for line in fin.readlines() if line != '\n']))

Δεν είναι αυτή η σωστή λογική στην Python. Δεν ελέγχεις αν υπάρχει το αρχείο απλά το κάνεις wrap σε try except και πιάνεις το FileNotFoundException

iceblade το strip χρειάζεται μπορεί η κενή γραμμή να είναι '  \n' ή '\t\n' οπότε το σωστό είναι

with open('file_in.txt', 'r') as fin, open('file_out.txt', 'w') as fo:
    fo.write(''.join([line for line in fin.readlines() if line.strip() != '']))

Χωρίς να ξέρω Python δοκίμασε το παρακάτω (φτιάξε το Indentation δεν έχω python compiler να το δοκιμάσω)

 

//read all the file lines

with open('C:\\Users\\Desktop\\test.txt','r') as input:

lines = input.readlines()

input.close()

//reopen file in write mode and write the not null values

with open('C:\\Users\\Desktop\\test.txt','w') as out:

for line in lines:

  if line !=' ':

   out.write(line)

out.close()

 

Αν και θεωρώ καλύτερη επιλογή να γράψεις σε ένα νέο αρχείο κατευθείαν γιατί σε μεγάλα αρχεία θα χρειάζεσαι αρκετή μνήμη με αυτό τον τρόπο. Οπότε αλλάζεις στον κώδικα που έχεις το όνομα του αρχείου του out , το μετακινείς και έξω απο την for (γιατί εκεί που το έχεις το ανοίγεις συνέχεια και πιθανόν είναι αυτό το θέμα σου) και τέλος πάντα να φροντίζεις να κλείνεις τα αρχεία

Το ίδιο για το strip

Δημοσ.

iceblade το strip χρειάζεται μπορεί η κενή γραμμή να είναι '  \n' ή '\t\n' οπότε το σωστό είναι

with open('file_in.txt', 'r') as fin, open('file_out.txt', 'w') as fo:
    fo.write(''.join([line for line in fin.readlines() if line.strip() != '']))

Το ίδιο για το strip

 

Σωστός!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...