разделить список с несколькими разделителями - PullRequest
1 голос
/ 11 декабря 2019

У меня есть список, содержащий строку из строк в текстовом файле.

import csv
import re
from collections import defaultdict

parameters = ["name", "associated-interface", "type", "subnet", "fqdn", "wildcard-fqdn", "start-ip", "end-ip", "comment"]
address_dict = defaultdict(dict)
address_statements = []

with open("***somepaths**\\file.txt",
          "r") as address:
    in_address = False
    for line in address:
        line = line.strip()
        #print (line)

        if in_address and line != "next":
            if line == "end":
                break
            address_statements.append(line)
        else:
            if line == "config firewall address":
                in_address = True
    #print(address_statements)

    if address_statements:
        for statement in address_statements:

            op, param, *val = statement.split()

            if op == "edit":

                address_id = param
            elif op == "set" and param in parameters:
                address_dict[address_id][param] = ' '.join(val)

# output to the CSV
with open("***somepaths**\\file.csv", "w",
          newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=parameters)
    writer.writeheader()
    for key in address_dict:
        address_dict[key]['name'] = key
        writer.writerow(address_dict[key])

вывод должен быть таким: отредактируйте «тест имени», но получается, что после имени выделяется пробел, и получается так: edit "name

Как я могу включить все в двойные кавычки?

1 Ответ

0 голосов
/ 12 декабря 2019

Вы используете

op, param, *val = statement.split()

, который разделяется на пробелы - строка

edit "CTS SVR" '

поместит '-edit' в op, '"CTS' в param и остаток строки (разделенный пробелами в виде списка) в val: ['SVR"'].

Вам нужноспособ Разделить строку пробелами, сохраняя подстроки в кавычках - если у вас есть параметры, которые внутренне разделены пробелами и разделены кавычками.

Вдохновленный этим ответом модуль CSV дает вам то, что вам нужно:

t1 = 'edit1 "some text" bla bla'
t2 = 'edit2 "some text"'
t3 = 'edit3 some thing'
import csv

reader = csv.reader([t1,t2,t3], delimiter = " ", skipinitialspace = True)
for row in reader:
    op, param, *remainder = row
    print(op,param,remainder, sep = " --> ")

Вывод:

edit1 --> some text --> ['bla', 'bla']
edit2 --> some text --> []
edit3 --> some --> ['thing']

Вы можете применить ридертолько на одну строку (reader = csv.reader([line], delimiter = " ")).


Возможно, дубликат Разделить строку на пробелы, сохраняя подстроки в кавычках - Я ранее проголосовал по этому вопросу и больше не могу голосовать за дубликат- отсюда и подробный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...