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

Pandas DataFrame转CSV重复表头及循环脚本优化求助

问题解决:CSV表头重复与循环逻辑优化

问题核心

  1. CSV表头重复:每次循环执行to_csv时默认覆盖文件并写入表头,导致多次运行后表头重复出现
  2. 循环逻辑隐患:使用递归调用begin()实现循环,多次执行后容易触发栈溢出

解决步骤

1. 修复CSV表头重复问题

  • 使用mode='a'(追加模式)替代默认的写入模式,避免覆盖原有数据
  • 通过os.path.exists()检查文件是否存在,仅在第一次写入时添加表头

2. 优化循环逻辑

  • 用while True循环替代递归,添加明确的退出条件(输入exit即可终止程序),避免栈溢出风险

修改后的完整代码

import os
import pandas as pd
import socket
import webbrowser
import time

def introduction():
    msg = '''
         This is a python project made by Abhay R 
         of ************************************.
       
         This project is based on how internet 
          service providers collect 
          data from clients\n\n\n\n\n'''
    for x in msg:
        print(x, end='')
        time.sleep(0.002)
    wait = input('Press any key to continue.....')

introduction()
print()

def main():
    csv_path = "C:\\Users\\stdev\\Desktop\\IP PROJECT\\Book 9.csv"
    # 检查文件是否存在,控制表头写入时机
    file_exists = os.path.exists(csv_path)
    
    while True:
        url = input("ENTER YOUR WEB HERE (or type 'exit' to quit):")
        if url.lower() == 'exit':
            print("Exiting program...")
            break
        
        webbrowser.open_new_tab(url)
        weblink = url
        Domain_name = ""
        
        x = weblink.split("/")
        if x[0] == "https:" or x[0] == "http:":
            x = x[2].split(".")
        else:
            x = x[0].split(".")
        
        if len(x) == 2:
            Domain_name = x[0]
        else:
            Domain_name = x[1]
        
        print("Domain Name Is:", Domain_name)        
        try:
            dns = socket.gethostbyname(weblink)
            print("DNS:", dns)
            
            # 调整数据格式为列表,避免DataFrame维度错误
            data = {"WEBSITE": [weblink], "DOMAIN": [Domain_name], "DNS": [dns]}
            df1 = pd.DataFrame(data)
            
            # 追加写入,仅第一次写入表头
            df1.to_csv(csv_path, mode='a', header=not file_exists, index=False)
            # 第一次写入后更新文件状态
            if not file_exists:
                file_exists = True
            
            # 打印当前CSV内容
            cvv = pd.read_csv(csv_path)
            print("\nCurrent CSV content:\n", cvv)
            print("-" * 50)
        except socket.gaierror:
            print(f"Error: Could not resolve DNS for {weblink}")
            print("-" * 50)

if __name__ == "__main__":
    main()

关键修改说明

  • 新增os模块用于检测文件存在状态,精准控制表头写入
  • 替换递归为while循环,添加退出指令,提升程序稳定性
  • 修复原代码中的缩进错误(如wait = input、域名判断逻辑的缩进)
  • 新增DNS解析异常处理,避免程序崩溃
  • 移除冗余变量赋值,简化代码结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:35:23