如何列出 CSV 文件中的各个列?

Posted

技术标签:

【中文标题】如何列出 CSV 文件中的各个列?【英文标题】:How to list to individual columns in CSV file? 【发布时间】:2022-01-13 20:18:01 【问题描述】:

我有一个我一直在处理的脚本,我从文本文件中提取信息并将其输出到具有特定列标题的 CSV 文件。 我在使用输出写入正确的列时遇到问题。它不是让“interface_list”在“Interface”下写入所有端口名称,而是将它们全部写入行中。我的其他列表也有同样的问题。

这是输出在 csv 文件中的样子:

电流输出

但我希望它看起来像这样:

期望的输出

我对python有点陌生,但一直在通过在线搜索学习。

谁能帮助我了解如何让我的列表进入各自的列?

这是我的代码:

import netmiko
import csv
import datetime
import os
import sys
import re
import time


interface_pattern = re.compile(r'interface (\S+)')
regex_description = re.compile(r'description (.*)')
regex_switchport = re.compile(r'switchport (.*)')

    
with open('int-ports.txt','r') as file:
    output = file.read()
    
    with open('HGR-Core2.csv', 'a', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['Interface', 'Description', 'Switchport'])
        
        interface_iter = interface_pattern.finditer(output)
        interface_list = []
        for interface in interface_iter:
            interface_list.append(interface.group(1))   
        writer.writerow(interface_list)
        
        description_iter = regex_description.finditer(output)
        description_list = []
        for description in description_iter:
            description_list.append(description.group(1))
        writer.writerow(description_list)   
        
        switchport_iter = regex_switchport.finditer(output)
        switchport_list = []
        for switchport in switchport_iter:
            switchport_list.append(switchport.group(0))

    f.close()

谢谢。

【问题讨论】:

请提供minimal reproducible example 其他人可以运行并包含可用于测试的文本格式的示例输入数据。 此外,我建议改用 Pandas 数据框。如果需要,它将允许您轻松操作它,然后您可以使用内置函数将其导出到 csv? 这是我正在阅读的 int-ports.txt 文件中的一些文本: interface GigabitEthernet7/10 description test1 switchport trunk native vlan 999 switchport mode trunk !接口 GigabitEthernet7/11 描述 test2 - Storage switchport access vlan 610 switchport mode access speed auto 1000 flowcontrol receive on !接口 GigabitEthernet7/12 说明 未使用 switchport access vlan 99 switchport mode access speed auto 1000 !接口 GigabitEthernet7/13 说明。 switchport access vlan 99 switchport mode access speed auto 1000 【参考方案1】:

Append 在循环中会变得非常痛苦。 人们没有意识到资源匮乏的事物是如何迅速发展起来的。

1.A.) All hings to 1 dataframe that later you can export as csv

salary = [['Alice', 'Data Scientist', 122000],
          ['Bob', 'Engineer', 77000],
          ['Ann', 'Manager', 119000]]
# Method 2
import pandas as pd
df = pd.DataFrame(salary)
df.to_csv('file2.csv', index=False, header=False)

1.B.) 1 个列表到数据框中的 1 个特定列 from here

L = ['Thanks You', 'Its fine no problem', 'Are you sure']

#create new df 
df = pd.DataFrame('col':L)
print (df)

                   col
0           Thanks You
1  Its fine no problem
2         Are you sure

2.) 导出为 csv documentation

df.to_csv('name.csv',index=False)

【讨论】:

那么如果我要走 Panda 的路线,我应该将它的代码放在我现有代码中的什么位置?当我将变量设置为像您的示例这样的列表时,我让它工作,但是当我阅读文本文档以制作这 3 个不同的列表(interface_list、description_list 和 switchport_list)时,我不确定如何获取这些列表和正确地将其传递给 pd.dataframe,因为我的代码只是出错了。 没关系,有一些玩,我让它工作。感谢您在这方面的帮助! 我很高兴你成功了。我还推荐使用高 lvl 函数更快的 numpy,以便您可以进行基于矩阵的转换以加速流程。

以上是关于如何列出 CSV 文件中的各个列?的主要内容,如果未能解决你的问题,请参考以下文章

如何让pandas停止跳过TSV文件中的第一个空白列?

提取 csv 文件特定列以在 Python 中列出

如何使用 CSVHelper 更新现有 CSV 文件中特定列中的值?

如何将带有 YYYYMMDD 列的 CSV 文件导入 ClickHouse 中的 DATE 列

要列出的 Pandas DataFrame 列[重复]

如何从.csv文件向JTable中的列添加标头