Есть ли способ заставить ConfigParser "не" возвращать список

Я пытаюсь, чтобы ConfigParser читал из файла с несколькими разделами. Тогда я бы сделал так, чтобы мой код перебирал каждый раздел с циклом for и назначал текущие доступные ключи переменной.

Оттуда я вызываю re.search для поиска этих текущих доступных ключей в отдельном файле.

Вот что-то вроде идеи (терпите меня, потому что я не лучший с этим языком)

import re
import sys
import ConfigParser

inputfile = raw_input("Enter config file: ")
scanfile = raw_input("Enter name of file to scan through: ")
searchfile = open(scanfile,'r')
config = config.ConfigParser(allow_no_value=True)
config.read(inputfile)
for ch in config.sections():
  keys = config.options(ch)
  person = ch
  for line in scanfile:
   if re.search(keys,line):
     outfile = open(person,'w')  
     print >> outfile,line

Однако configparser возвращает список, который нарушает re.search. Есть ли способ заставить его вернуть кортеж, или, что еще лучше, только пустые опции без []?

Есть ли другой модуль, который также может искать (find() не работает для того, что я пытаюсь сделать).

Спасибо

1 ответ

Решение

Если вы хотите проверить, находятся ли какие-либо ключи в списке ключей в строке:

import re
import sys
import ConfigParser
inputfile = raw_input("Enter config file: ")
scanfile = raw_input("Enter name of file to scan through: ")
searchfile = open(scanfile,'r')
config = ConfigParser.ConfigParser(allow_no_value=True)
config.read(inputfile)
for ch in config.sections():
  keys = set(config.options(ch))
  person = ch
  for line in searchfile: # iterate over file object not the string
      if any(k in keys for k in line.split()):
         outfile = open(person,'w')
         print >> outfile,line
searchfile.close()
outfile.close()

С помощью with и несколько изменений в том, как вы называете свои переменные:

input_file = raw_input("Enter config file: ")
scan_file = raw_input("Enter name of file to scan through: ")
config = ConfigParser.ConfigParser(allow_no_value=True)
config.read(input_file)
with open(scan_file, 'r') as search_file:: # with closes your files automatically
    for person in config.sections():
        keys = set(config.options(person))
        for line in search_file:
            if any(k in keys for k in line.split()): # check if any key is in the line
                with open(person, 'w') as out_file:
                   out_file.write(line)
Другие вопросы по тегам