You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成IP地址导出CSV出现多余引号问题求助

CSV导出多余引号问题解决方案

问题说明

编写Python代码批量生成IP地址并导出为CSV文件后,发现文件中出现不必要的嵌套引号。原代码及调用方式如下:

原代码

import csv
import ipaddress
import random
from random import shuffle

LAN = ipaddress.ip_network('192.168.0.0/16')
WAN1 = ipaddress.ip_network('11.10.8.0/22')
WAN2 = ipaddress.ip_network('12.10.8.0/22')

LAN_IP_Adresses = [ IP_LAN for IP_LAN in LAN.hosts()]
WAN1_IP_Adresses = [ IP_WAN1 for IP_WAN1 in WAN1.hosts()]
WAN2_IP_Adresses = [ IP_WAN2 for IP_WAN2 in WAN2.hosts()]

index_IP_GW = len(WAN1_IP_Adresses)-1

locations_list=['Abidjan','Abu Dhabi','Adana','Adelaide', 'Ahmadabad','Algiers','Amsterdam','Ankara','Anshan','Athens','BANGKOK','BUCHAREST','BUDAPEST','Bagdad','Bandung','Bangalore','Bangkok','Barcelona','Beirut','Belgrade','Bern','Bogota','Brasilia','Brazzaville','Brussels','Bursa','CAIRO','CARACAS','CONAKRY','Canberra','Casablanca','Changchun','Chengdu','Chicago','Copenhagen','Dakar','MINSK','Madrid','Medina','Nairobi','Napoli','Montreal',
'Odessa','Omdurman','Osaka','Ottawa','PYONGYANG','Paris','Pekin', 'Perth','Philadelphia','Phoenix','Pimpri Chinchwad','Porto','Porto Alegre','QUITO','Qingdao','Rabat','Rajkot','Riadh','Rio de Janeiro','Rome','SANTIAGO','Salvador','Samara','San Antonio','San Francisco','Sao Paulo','Sendai','Seongnam','Seoul','Shanghai','Singapore','Sydney','Taiyuan','Tehran','Tijuana','Tokyo','Toronto','Moscou','Moscow','Mumbai (Bombay)','Munich','México','Milan',
 'Tripoli','Tunis','Vienna','Warsaw','Wuhan','Xian','Yaounde','Yokohama', 'Zapopan','hong kong','Dallas','Delhi','Doha','Dublin','Durban','Ecatepec','Frankfurt','Fukuoka','Giza','Hamburg','Havana','Helsinki','Houston','Hyderabad','Istanbul','Jaipur','Jakarta','Jeddah','Johannesburg','KIEV','Kaduna','Kano','Kazan','Kuala Lumpur''Kyoto','LUANDA','Lahore','Lanzhou','Le Caire','Leon','Lima','Lisbon','London','Los Angeles','Lyon','MANILA','Melbourne','New York']

def initial_Sites_list_generator(filename='SITES_CI.csv', Number_of_Sites=1000):
    file_to_output = open(filename,'w',newline='')
    csv_writer = csv.writer(file_to_output,delimiter=',')
    
    Site_Nbr=1
    index = 0 
 
    csv_writer.writerow(["SITE_NAME", "SERIAL_NUMBER",'"LAN_IP_ADDRESS"','"WAN_IP_ADDRESS1"','"WAN_IP_ADDRESS2"','"GATEWAY_IP_ADDRESS1"','"GATEWAY_IP_ADDRESS2"','"ROUTE_REFLECTOR"','"LOCATIONS"','"HARDWAREMODEL"','"LANINT"','"WANINT1"','"WANINT2"','"BW_OUT"','"BW_IN"'])
    
    for i in range(1,Number_of_Sites+1):
        shuffle(locations_list)
        location = random.choice(locations_list)
        csv_writer.writerow(['"SITE'+ str(Site_Nbr)+'"',"2e70129bde9c4426b9213d4408c300",f'"{(LAN_IP_Adresses[index])}"',f'"{str(WAN1_IP_Adresses[index])}"',f'"{str(WAN2_IP_Adresses[index])}"',f'"{str(WAN1_IP_Adresses[index_IP_GW])}"',f'"{str(WAN2_IP_Adresses[index_IP_GW])}"','"False"',f'"{location}"','"ONEv600"','"gigabitethernet0/2"','"gigabitethernet0/0"','"gigabitethernet0/1"','"10"','"20"'])
        Site_Nbr = Site_Nbr+1
        index = index+1
    file_to_output.close()

原调用代码

initial_Sites_list_generator('SITES_OVP.csv', 1000)

问题原因

Python的csv.writer会自动识别需要引号包裹的字段(比如包含逗号、换行符的内容)并添加引号。但你手动给表头和每行数据的字段添加了双引号,导致csv.writer将这些手动添加的引号当作字段内容的一部分,再次添加外层引号,最终出现嵌套引号的问题。

修改后的代码

去掉所有手动添加的双引号,让csv.writer自动处理格式:

import csv
import ipaddress
import random
from random import shuffle

LAN = ipaddress.ip_network('192.168.0.0/16')
WAN1 = ipaddress.ip_network('11.10.8.0/22')
WAN2 = ipaddress.ip_network('12.10.8.0/22')

LAN_IP_Adresses = [IP_LAN for IP_LAN in LAN.hosts()]
WAN1_IP_Adresses = [IP_WAN1 for IP_WAN1 in WAN1.hosts()]
WAN2_IP_Adresses = [IP_WAN2 for IP_WAN2 in WAN2.hosts()]

index_IP_GW = len(WAN1_IP_Adresses)-1

locations_list=['Abidjan','Abu Dhabi','Adana','Adelaide', 'Ahmadabad','Algiers','Amsterdam','Ankara','Anshan','Athens','BANGKOK','BUCHAREST','BUDAPEST','Bagdad','Bandung','Bangalore','Bangkok','Barcelona','Beirut','Belgrade','Bern','Bogota','Brasilia','Brazzaville','Brussels','Bursa','CAIRO','CARACAS','CONAKRY','Canberra','Casablanca','Changchun','Chengdu','Chicago','Copenhagen','Dakar','MINSK','Madrid','Medina','Nairobi','Napoli','Montreal',
'Odessa','Omdurman','Osaka','Ottawa','PYONGYANG','Paris','Pekin', 'Perth','Philadelphia','Phoenix','Pimpri Chinchwad','Porto','Porto Alegre','QUITO','Qingdao','Rabat','Rajkot','Riadh','Rio de Janeiro','Rome','SANTIAGO','Salvador','Samara','San Antonio','San Francisco','Sao Paulo','Sendai','Seongnam','Seoul','Shanghai','Singapore','Sydney','Taiyuan','Tehran','Tijuana','Tokyo','Toronto','Moscou','Moscow','Mumbai (Bombay)','Munich','México','Milan',
 'Tripoli','Tunis','Vienna','Warsaw','Wuhan','Xian','Yaounde','Yokohama', 'Zapopan','hong kong','Dallas','Delhi','Doha','Dublin','Durban','Ecatepec','Frankfurt','Fukuoka','Giza','Hamburg','Havana','Helsinki','Houston','Hyderabad','Istanbul','Jaipur','Jakarta','Jeddah','Johannesburg','KIEV','Kaduna','Kano','Kazan','Kuala Lumpur','Kyoto','LUANDA','Lahore','Lanzhou','Le Caire','Leon','Lima','Lisbon','London','Los Angeles','Lyon','MANILA','Melbourne','New York']

def initial_Sites_list_generator(filename='SITES_CI.csv', Number_of_Sites=1000):
    # 使用with语句自动管理文件,避免手动关闭
    with open(filename,'w',newline='') as file_to_output:
        csv_writer = csv.writer(file_to_output,delimiter=',')
        
        Site_Nbr=1
        index = 0 
     
        # 表头去掉手动添加的双引号
        csv_writer.writerow(["SITE_NAME", "SERIAL_NUMBER", "LAN_IP_ADDRESS", "WAN_IP_ADDRESS1", "WAN_IP_ADDRESS2", "GATEWAY_IP_ADDRESS1", "GATEWAY_IP_ADDRESS2", "ROUTE_REFLECTOR", "LOCATIONS", "HARDWAREMODEL", "LANINT", "WANINT1", "WANINT2", "BW_OUT", "BW_IN"])
        
        for i in range(1,Number_of_Sites+1):
            shuffle(locations_list)
            location = random.choice(locations_list)
            # 每行数据去掉手动添加的双引号
            csv_writer.writerow([
                f'SITE{Site_Nbr}', 
                "2e70129bde9c4426b9213d4408c300", 
                str(LAN_IP_Adresses[index]), 
                str(WAN1_IP_Adresses[index]), 
                str(WAN2_IP_Adresses[index]), 
                str(WAN1_IP_Adresses[index_IP_GW]), 
                str(WAN2_IP_Adresses[index_IP_GW]), 
                "False", 
                location, 
                "ONEv600", 
                "gigabitethernet0/2", 
                "gigabitethernet0/0", 
                "gigabitethernet0/1", 
                "10", 
                "20"
            ])
            Site_Nbr += 1
            index += 1

调用代码保持不变:

initial_Sites_list_generator('SITES_OVP.csv', 1000)

额外优化说明

  • 使用with语句管理文件,无需手动调用close(),即使代码抛出异常也能保证文件正常关闭,提升代码安全性。

内容的提问来源于stack exchange,提问作者sunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:24:24