यहाँ एक अच्छा, साफ सुथरा पायथन समाधान है। मैंने यहां पर कोई प्रयास नहीं किया।
यह फ़ाइल की प्रतिलिपि को संशोधित करता है, न कि फ़ाइल की प्रतिलिपि बनाने और कॉपी की अंतिम पंक्ति से नई पट्टी को हटाने के लिए। यदि फ़ाइल बड़ी है, तो यह पर्ल समाधान की तुलना में बहुत तेज़ होगा जिसे सर्वश्रेष्ठ उत्तर के रूप में चुना गया था।
यदि अंतिम दो बाइट्स CR / LF हैं, या एक बाइट LF है, तो यह दो बाइट्स द्वारा एक फ़ाइल को काट देता है। यदि अंतिम बाइट (CR) LF नहीं है, तो यह फ़ाइल को संशोधित करने का प्रयास नहीं करता है। यह त्रुटियों को संभालता है। पायथन 2.6 में परीक्षण किया गया।
इसे "स्ट्रिपलास्ट" नामक फ़ाइल में रखें और 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 "पर्ल गोल्फ" की भावना में, यहां मेरा सबसे छोटा पायथन समाधान है। यह मेमोरी में मानक इनपुट से पूरी फ़ाइल को स्लैप करता है, अंत में सभी नए सिरे को स्ट्रिप्स करता है, और मानक आउटपुट के लिए परिणाम लिखता है। पर्ल के रूप में नहीं; तुम बस इस तरह थोड़ा मुश्किल तेजी से सामान के लिए पर्ल को हरा नहीं सकते।
कॉल से "\ n" निकालें .rstrip()
और यह फ़ाइल के अंत से कई रिक्त लाइनों सहित, सभी सफेद स्थान को छीन लेगा।
इसे "slurp_and_chomp.py" में डालें और फिर चलाएं python slurp_and_chomp.py < inputfile > outputfile
।
import sys
sys.stdout.write(sys.stdin.read().rstrip("\n"))