基于以下link:

我可以轻松格式化一台MAC电脑.但是我在try 从csv文件中执行多个操作时遇到了一个问题.当我运行文件时,它会转换它们,但脚本会将每个文件转换6次.如果我加上"return",那么它只转换前一个6次.

def readfile_csv():
    with open('ap_macs.csv', 'r',encoding='utf-8-sig') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        for lines in csv_reader:
            data = (lines[0])
            for i in range(0,12,2):
                 format_mac = ':'.join(data[i:i + 2] for i in range(0, 12, 2))
                 print(format_mac.swapcase())

理想的情况下,我希望能用Pandas和Excel来做这件事,但是索引让我很痛苦.谢谢你的帮助.非常感谢.

    ap_macs
A1B2C3D4E5F6
A1B2C3D4E5F7
A1B2C3D4E5F8
A1B2C3D4E5F9
a1b2c3d4e5f6
a1b2c3d4e5f7
a1b2c3d4e5f8
a1b2c3d4e5f9

推荐答案

你可以用Pandas 来做这个.请注意,如果你只是为了阅读csv而使用它,那么Pandas 就是杀伤力过大了.

df = pd.read_csv('ap_macs.csv')

# Slice the mac addresses into chunks
# This list will contain one `pd.Series` each for the second through last chunks
chunks = [df["ap_macs"].str[i:i+2] for i in range(2, 12, 2)]

# Then concatenate all the chunks, with a separator, to the first chunk
df["MAC"] = df['ap_macs'].str[0:2].str.cat(chunks, ":")

其中给出:

        ap_macs                MAC
0  A1B2C3D4E5F6  A1:B2:C3:D4:E5:F6
1  A1B2C3D4E5F7  A1:B2:C3:D4:E5:F7
2  A1B2C3D4E5F8  A1:B2:C3:D4:E5:F8
3  A1B2C3D4E5F9  A1:B2:C3:D4:E5:F9
4  a1b2c3d4e5f6  a1:b2:c3:d4:e5:f6
5  a1b2c3d4e5f7  a1:b2:c3:d4:e5:f7
6  a1b2c3d4e5f8  a1:b2:c3:d4:e5:f8
7  a1b2c3d4e5f9  a1:b2:c3:d4:e5:f9

当然,如果需要,可以覆盖ap_macs列,但是我为这个演示创建了一个新列.


如果要使用csv.reader方法,需要先创建字符串,然后打印它.

def readfile_csv():
    # csv_data = []
    with open('ap_macs.csv', 'r',encoding='utf-8-sig') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        for row in csv_reader:
            data = row[0]
            for i in range(0,12,2):
                 format_mac = ':'.join(data[i:i + 2] for i in range(0, 12, 2)).swapcase()
            print(format_mac)
            # csv_data.append(format_mac)         
    # return csv_data

将打印:

a1:b2:c3:d4:e5:f6
a1:b2:c3:d4:e5:f7
a1:b2:c3:d4:e5:f8
a1:b2:c3:d4:e5:f9
A1:B2:C3:D4:E5:F6
A1:B2:C3:D4:E5:F7
A1:B2:C3:D4:E5:F8
A1:B2:C3:D4:E5:F9

请注意,打印与返回数据不同,如果您确实想在函数外使用此数据,则必须返回它(取消注释注释注释行)

Python相关问答推荐

是否有使用纯霍夫曼编码的现代图像格式?

Django关于UniqueBindition的更新

如何将不同长度的新列添加到现有的框架中

Snap 7- read_Area用于类似地址的变量

在Python中管理多个OpenGVBO和VAO实例

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

滚动和,句号来自Pandas列

处理(潜在)不断增长的任务队列的并行/并行方法

未删除映射表的行

. str.替换pandas.series的方法未按预期工作

为什么符号没有按顺序添加?

如果值不存在,列表理解返回列表

如何制作10,000年及以后的日期时间对象?

Telethon加入私有频道

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

不能使用Gekko方程'

如果初始groupby找不到满足掩码条件的第一行,我如何更改groupby列,以找到它?

pandas:对多级列框架的列进行排序/重新排序