使用csv.DictReader处理空格分隔数据异常:输出单个字符原因排查
问题原因分析
你遇到的问题核心在于**csv.DictReader的第一个参数传错了类型**:
csv.DictReader要求第一个参数是按行迭代的对象(比如打开的文件句柄、每行字符串组成的列表),但你传入的' '.join(ios_r.stdout.split())是一个完整的长字符串。- 字符串本身属于可迭代对象,迭代时会逐个返回每个字符,所以遍历
ios_e.reader时,会把整个字符串拆成单个字符输出。
修正方案
你需要先把命令输出按行拆分,再处理每行的多空格为单空格,最后将处理后的行列表传给csv.DictReader。同时注意fieldnames要用有序列表(集合是无序的,会导致字段对应混乱),代码示例如下:
# 按行拆分命令输出,逐行处理多空格为单空格 processed_lines = [' '.join(line.split()) for line in ios_r.stdout.splitlines()] # 用处理后的行列表初始化DictReader,fieldnames用列表保证顺序 ios_e = csv.DictReader(processed_lines, delimiter=' ', fieldnames=['Device', 'tps', 'kB_read/s' ,'kB_wrtn/s', 'kB_dscd/s', 'kB_read', 'kB_wrtn', 'kB_dscd'])
内容的提问来源于stack exchange,提问作者Rusteme
相关产品推荐
相关产品推荐

