تجاهل Last n عند استخدام الخطوط القراءة مع Python
سؤال
لدي ملف قرأته من ذلك يبدو:
1 value1
2 value2
3 value3
قد يكون للملف أو لا يحتوي على زائدة n في السطر الأخير.
يعمل الرمز الذي أستخدمه بشكل رائع ، ولكن إذا كان هناك فشل.
ما هي أفضل طريقة للقبض على هذا؟
الكود الخاص بي للرجوع إليه:
r=open(sys.argv[1], 'r');
for line in r.readlines():
ref=line.split();
print ref[0], ref[1]
التي ستفشل مع:
Traceback (أحدث مكالمة أخيرة):
ملف "./test" ، السطر 14 ، في
Print Ref [0] ، Ref [1
indexerror: قائمة فهرس خارج النطاق
المحلول
يمكنك تجاهل الخطوط التي تحتوي على مساحة بيضاء فقط:
for line in r.readlines():
line = line.rstrip() # Remove trailing whitespace.
if line: # Only process non-empty lines.
ref = line.split();
print ref[0], ref[1]
نصائح أخرى
لا أعتقد أنك أخبرتنا القصة بأكملها. line.split()
سوف يعطي نفس النتيجة بغض النظر عما إذا تم إنهاء السطر الأخير بواسطة \n
أم لا.
لاحظ أن السطر الأخير في ملف يتم إنهائه بواسطة \n
هو السلوك المعتاد ، والأشخاص يزعجون في بعض الأحيان خط لم يتم إنهاء ذلك.
إذا كنت ستفعل شيئًا مثل:
print repr(line), repr(ref)
بدلاً من
print ref[0], ref[1]
ستكون قادرًا على اكتشاف نفسك بالضبط ما يجري ، بدلاً من تركنا للتخمين.
إذا كان مارك بايرز يتبفق ، فإن خطك الأخير فارغ أو يتكون فقط من المسافة البيضاء ، فيمكنك تجاهل هذا الخط (وجميع هذه الخطوط الأخرى) من خلال هذا الرمز الأكثر بساطة إلى حد ما:
for line in r: # readlines is passe
ref = line.split() # split() ignores trailing whitespace
if ref:
print ref[0], ref[1]
يرجى أيضًا النظر في إمكانية أن يكون لديك حقل واحد فقط ، وليس 0 أو 2 ، في خطك الأخير.