تجاهل Last n عند استخدام الخطوط القراءة مع Python

StackOverflow https://stackoverflow.com/questions/4006441

  •  25-09-2019
  •  | 
  •  

سؤال

لدي ملف قرأته من ذلك يبدو:

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 ، في خطك الأخير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top