Pandas DataFrame转CSV重复表头及循环脚本优化求助
问题解决:CSV表头重复与循环逻辑优化
问题核心
- CSV表头重复:每次循环执行
to_csv时默认覆盖文件并写入表头,导致多次运行后表头重复出现 - 循环逻辑隐患:使用递归调用
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
相关产品推荐
相关产品推荐

