簡體   English   中英

從python文件中讀取一行

[英]Read a line from a file in python

我有一個名為mcelog.conf文件,正在用我的代碼讀取此文件。 該文件的內容是

no-syslog = yes   # (or no to disable)
logfile = /tmp/logfile

程序將讀取mcelog.conf文件並檢查no-syslog標記,如果no-syslog = yes則程序必須檢查標記logfile並讀取logfile標記。 誰能讓我知道如何獲取/tmp/logfile

with open('/etc/mcelog/mcelog.conf', 'r+') as fp:
    for line in fp:
        if re.search("no-syslog =", line) and re.search("= no", line):
            memoryErrors = readLogFile("/var/log/messages")
            mcelogPathFound = true
            break
        elif re.search("no-syslog =", line) and re.search("= yes", line):
            continue
        elif re.search("logfile =", line):  
            memoryErrors = readLogFile(line)   # Here I want to pass the value "/tmp/logfile" but currently "logfile = /tmp/logfile" is getting passed
            mcelogPathFound = true
            break
fp.close()

您可以拆分行以獲取所需的值:

line.split(' = ')[1]

但是,您可能需要查看configparser module的文檔。

將代碼更改為:

with open('/etc/mcelog/mcelog.conf', 'r+') as fp:
    for line in fp:
        if re.search("no-syslog =", line) and re.search("= no", line):
            memoryErrors = readLogFile("/var/log/messages")
            mcelogPathFound = true
            break
        elif re.search("no-syslog =", line) and re.search("= yes", line):
            continue
        elif re.search("logfile =", line):  
            emoryErrors = readLogFile(line.split("=")[1].strip())   # Here I want to pass the value "/tmp/logfile" but currently "logfile = /tmp/logfile" is getting passed
            mcelogPathFound = true
            break
 fp.close()

這是因為您只想讀取行的一部分而不是整個內容,所以我只用“ =”符號將其拆分,然后將其剝離以刪除任何空白

我喜歡configparser模塊的建議,因此這里是一個示例(Python 3)

對於給定的輸入,它將輸出reading /var/log/messages

import configparser, itertools
config = configparser.ConfigParser()
filename = "/tmp/mcelog.conf"

def readLogFile(filename):
    if filename:
        print("reading", filename)
    else:
        raise ValueError("unable to read file")

section = 'global'
with open(filename) as fp:
    config.read_file(itertools.chain(['[{}]'.format(section)], fp), source = filename)

no_syslog = config[section]['no-syslog']
if no_syslog == 'yes':
    logfile = "/var/log/messages"
elif no_syslog == 'no':
    logfile = config[section]['logfile']

if logfile:
    mcelogPathFound = True

memoryErrors = readLogFile(logfile)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM