سؤال

لنفترض أنني أقوم بتحليل ملف يستخدم ; كحرف التعليق.لا أريد تحليل التعليقات.لذلك إذا كان الخط يبدو كالتالي:

example.com.              600     IN      MX      8 s1b9.example.net ; hello!

هل هناك طريقة أسهل/أكثر أناقة لإزالة الأحرف بخلاف هذه:

rtr = ''
for line in file:
    trig = False
    for char in line:
        if not trig and char != ';':
            rtr += char
        else:
            trig = True
    if rtr[max(rtr)] != '\n':
        rtr += '\n'
هل كانت مفيدة؟

المحلول

أنا أوصي بالقول

line.split(";")[0]

والتي ستمنحك سلسلة من جميع الأحرف حتى لا تشمل الأول "؛" ؛ شخصية.إذا لم يكن هناك حرف "؛" ، فسيعطيك السطر بأكمله.

نصائح أخرى

فقط قم بتقسيمه على الخط حسب التعليق ثم احصل على العنصر الأول

line.split(";")[0]

لبثيون 2.5 أو أكبر، أود استخدام partition طريقة:

rtr = line.partition(';')[0].rstrip() + '\n'
file = open(r'c:\temp\test.txt', 'r')
for line in file:   print
   line.split(";")[0].strip()

لذلك سترغب في تقسيم الخط في الفاصلة المنقوطة الأولى، واتخاذ كل شيء قبل ذلك، وتجريد أي مساحة بيضاء العالقة، وإلحاق حرف جديد.

rtr = line.split(";", 1)[0].rstrip() + '\n'

روابط للوثائق:

خطوط القراءة والتقسيم والتعرية والانضمام مع خطوط نيولين للجميع في سطر واحد من بيثون:

rtr = '\n'.join(line.split(';')[0].strip() for line in open(r'c:\temp\test.txt', 'r'))

هنا طريقة أخرى:

في [6]: Line = "FOO؛ BAR" في [7]: خط [: Line.Find.find ("؛")] + " n" خارج [7]: 'foo  n'

لم أختبر هذا مع بيثون ولكني استخدم رمز مماثل آخر حيث.

import re
content = open(r'c:\temp\test.txt', 'r').read()
content = re.sub(";.+", "\n")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top