İşte güzel, düzenli bir Python çözümü. Burada kandırılmak için hiçbir girişimde bulunmadım.
Bu, dosyanın bir kopyasını oluşturmak ve yeni satırı kopyanın son satırından çıkarmak yerine dosyayı yerinde değiştirir. Dosya büyükse, bu en iyi yanıt olarak seçilen Perl çözümünden çok daha hızlı olacaktır.
Son iki bayt CR / LF ise bir dosyayı iki bayt veya son bayt LF ise bir bayt olarak keser. Son bayt (lar) LF değilse dosyayı değiştirmeye çalışmaz. Hataları işler. Python 2.6'da test edilmiştir.
Bunu "striplast" ve bir dosyaya koyun chmod +x striplast
.
#!/usr/bin/python
# strip newline from last line of a file
import sys
def trunc(filename, new_len):
try:
# open with mode "append" so we have permission to modify
# cannot open with mode "write" because that clobbers the file!
f = open(filename, "ab")
f.truncate(new_len)
f.close()
except IOError:
print "cannot write to file:", filename
sys.exit(2)
# get input argument
if len(sys.argv) == 2:
filename = sys.argv[1]
else:
filename = "--help" # wrong number of arguments so print help
if filename == "--help" or filename == "-h" or filename == "/?":
print "Usage: %s <filename>" % sys.argv[0]
print "Strips a newline off the last line of a file."
sys.exit(1)
try:
# must have mode "b" (binary) to allow f.seek() with negative offset
f = open(filename, "rb")
except IOError:
print "file does not exist:", filename
sys.exit(2)
SEEK_EOF = 2
f.seek(-2, SEEK_EOF) # seek to two bytes before end of file
end_pos = f.tell()
line = f.read()
f.close()
if line.endswith("\r\n"):
trunc(filename, end_pos)
elif line.endswith("\n"):
trunc(filename, end_pos + 1)
PS "Perl golf" ruhuyla, benim en kısa Python çözümü. Tüm dosyayı standart girdiden belleğe kaydırır, tüm yeni satırları sondan çıkarır ve sonucu standart çıktıya yazar. Perl kadar kısa değil; Bunun gibi biraz zor hızlı şeyler için Perl'i yenemezsin.
Çağrısından "\ n" işaretini kaldırın, .rstrip()
birden çok boş satır da dahil olmak üzere dosyanın sonundaki tüm beyaz boşlukları şeritleyecektir.
Bunu "slurp_and_chomp.py" içine koyun ve çalıştırın python slurp_and_chomp.py < inputfile > outputfile
.
import sys
sys.stdout.write(sys.stdin.read().rstrip("\n"))