Есть ли способ заставить 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)