求助:Python读取CSV/TXT每行数据存入变量的实现方案
解决方案:读取IP列表并批量执行cURL请求
一、选择更易实现的文件格式:TXT
因为你的数据每行只有一个IP地址,纯TXT格式比CSV更简单,无需处理分隔符,直接逐行读取即可。如果用现有的CSV文件也可以兼容,下面分别给出两种格式的读取方法。
二、将IP存入一维数组
方法1:读取TXT文件(推荐)
初始化一个空数组,逐行读取文件内容并去除换行符后加入数组:
# 初始化空数组存储IP地址 ip_list = [] # 读取TXT文件 with open("lines.txt", "r") as file: for line in file: # 去除每行末尾的换行符和空白字符 ip = line.strip() # 跳过空行(如果文件里有) if ip: ip_list.append(ip) print(ip_list) # 输出:['192.168.1.1', '192.168.1.2', ..., '192.168.1.7']
方法2:兼容现有CSV文件
如果继续用CSV文件,注意csv.reader会把每行内容包装成列表(比如['192.168.1.1']),需要提取列表中的第一个元素存入数组:
import csv ip_list = [] with open("lines.csv") as csvFile: csvDATA = csv.reader(csvFile) for row in csvDATA: # 跳过空行 if row: ip = row[0].strip() ip_list.append(ip) print(ip_list)
三、批量执行cURL请求的简便实现
推荐用Python的requests库直接发送HTTP请求,比调用系统curl命令更简洁、易维护:
步骤1:安装requests库
pip install requests
步骤2:批量发送请求代码
import requests # 假设你要请求的目标URL模板,可根据实际需求修改 url_template = "http://example.com/check?ip={}" for ip in ip_list: try: response = requests.get(url_template.format(ip)) # 处理响应,示例打印状态码和部分内容 print(f"IP: {ip}, 状态码: {response.status_code}, 响应内容: {response.text[:50]}") except Exception as e: print(f"请求IP {ip} 失败: {str(e)}")
替代方案:调用系统curl命令
如果一定要用curl命令,可以用subprocess模块执行:
import subprocess for ip in ip_list: # 构造curl命令,根据实际需求调整参数 cmd = ["curl", f"http://example.com/check?ip={ip}"] try: result = subprocess.run(cmd, capture_output=True, text=True, check=True) print(f"IP: {ip}, 响应: {result.stdout[:50]}") except subprocess.CalledProcessError as e: print(f"IP {ip} 请求失败,错误: {e.stderr}")
注意事项
- 使用
with语句处理文件时,无需手动调用close(),Python会自动管理文件资源(你的原有代码中csvFile.close()是多余的)。 - 读取文件时记得跳过空行,避免数组存入空字符串。
- 批量请求时可加入
time.sleep(1)这类延迟,避免对目标服务器造成过大压力。
内容的提问来源于stack exchange,提问作者OldziBoldzi
相关产品推荐
相关产品推荐

