如何在Python(pytest)中创建/追加CSV/Excel时拆分文本为多行?
解决CSV中用户名多行拆分写入的问题
问题根源
你当前代码里的user_list = col1.find_element(By.TAG_NAME, "ul").text获取的是整个<ul>标签下所有文本,浏览器会把每个<li>的内容用**换行符(\n)**拼接成一个字符串,直接写入CSV时会被当成单个单元格内容,所以显示为一行。
可行解决方案
方案1:拆分用户名并循环写入CSV
核心思路是把拼接的用户名字符串拆分成单个用户,然后每个用户对应一行写入,同时避免重复写入表头:
import csv import time import os from selenium.webdriver.common.by import By # 获取数据 user_list = col1.find_element(By.TAG_NAME, "ul").text total_count = driver.find_elements(By.TAG_NAME, "tr")[3].find_element(By.CLASS_NAME, 'badge').text current_time = time.strftime("%d%m%Y-%H%M%S") # 拆分用户名为列表,过滤空行和多余空格 user_names = [name.strip() for name in user_list.split('\n') if name.strip()] # 定义表头 header = ['User Name', 'User count', 'Time'] # 写入CSV file_path = 'users.csv' with open(file_path, 'a', encoding='UTF8', newline='') as f: writer = csv.writer(f) # 仅当文件不存在时写入表头 if not os.path.exists(file_path): writer.writerow(header) # 循环写入每个用户的行 for name in user_names: writer.writerow([name, total_count, current_time])
方案2:用Pandas写入CSV/Excel(更简洁)
如果允许使用第三方库,Pandas能更轻松处理格式,还支持直接写入Excel:
- 先安装依赖:
pip install pandas openpyxl # openpyxl用于写入Excel
- 代码实现:
import pandas as pd import time import os from selenium.webdriver.common.by import By # 获取数据 user_list = col1.find_element(By.TAG_NAME, "ul").text total_count = driver.find_elements(By.TAG_NAME, "tr")[3].find_element(By.CLASS_NAME, 'badge').text current_time = time.strftime("%d%m%Y-%H%M%S") # 拆分用户名 user_names = [name.strip() for name in user_list.split('\n') if name.strip()] # 构造DataFrame data = { 'User Name': user_names, 'User count': [total_count] * len(user_names), 'Time': [current_time] * len(user_names) } df = pd.DataFrame(data) # 写入CSV(追加模式) df.to_csv('users.csv', mode='a', encoding='UTF8', header=not os.path.exists('users.csv'), index=False) # 或者写入Excel(追加模式,需openpyxl) with pd.ExcelWriter('users.xlsx', mode='a', engine='openpyxl', if_sheet_exists='overlay') as writer: df.to_excel(writer, sheet_name='Users', header=not os.path.exists('users.xlsx'), index=False)
关键说明
split('\n'):将<ul>的文本按换行拆分成单个用户名,strip()去除每个用户名前后的空格/换行符。- 表头判断:用
os.path.exists检查文件是否存在,避免每次追加都重复写表头。 - 循环写入:每个用户名对应一行,
total_count和Time保持一致,符合你要的多行展示需求。
内容的提问来源于stack exchange,提问作者varun
相关产品推荐
相关产品推荐

