Python文本转嵌套列表:如何修正格式适配CUCM函数调用
问题:转换文本文件为符合要求的嵌套列表用于CUCM函数输入
问题背景
需将每行格式为"A.B.C.D","user","test123"的文本文件转换为嵌套列表,作为cucm函数的输入。现有代码将整行内容识别为单个带引号的元素,导致cucm函数执行失败。
现有代码
filepath = "<path>/connect.txt" def func(x): try: return int(x) except ValueError: return x with open(filepath) as f: table_data = [[ func(x) for x in line.split()] for line in f] print (table_data)
当前输出
[['"A.B.C.D","user","test123"'], ['"W.X.Y.Z","user","test123"']]
预期输出
[["A.B.C.D","user","test123"], ["W.X.Y.Z","user","test123"]]
CUCM目标函数
def cucm(ip, username, password): sshsession = paramiko.SSHClient() sshsession.set_missing_host_key_policy(paramiko.AutoAddPolicy()) sshsession.connect(ip, username=username, password=password) # "display=True" is just to show you what script does in real time. While in production you can set it to False interact = SSHClientInteraction(sshsession, timeout=600, display=True) # program will wait till session is established and CUCM returns admin prompt interact.expect('admin:')
解决方案
问题根源在于line.split()默认按空格分割,但目标文本行无空格,是带引号的逗号分隔格式。使用Python内置的csv模块可精准解析这类格式:
import csv filepath = "<path>/connect.txt" def func(x): try: return int(x) except ValueError: return x with open(filepath, newline='') as f: reader = csv.reader(f, quotechar='"', delimiter=',') table_data = [[func(x) for x in row] for row in reader] print(table_data)
关键说明
csv.reader会自动识别带引号的字段,去除引号并按逗号分割每行内容quotechar='"'指定引号为字段包裹符,delimiter=','指定分隔符为逗号- 保留原
func函数,用于按需将字段转换为数字类型
修改后的代码输出将完全匹配预期格式,生成的嵌套列表可直接传入cucm函数使用。
内容的提问来源于stack exchange,提问作者Amit Kumar
相关产品推荐
相关产品推荐

