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

Python爬虫导出CSV格式异常求助:所有数据集中在一行

解决CSV数据全在一行的问题

你的问题核心是数据组织逻辑错误:你把所有赛季、所有位置集合、所有球队分别存成三个大列表,最后把这三个大列表作为一行塞进DataFrame,自然导出的CSV只有一行。正确的做法是把每个赛季下的「单支球队+对应位置」做成一条独立记录,再统一存入DataFrame。

修正后的代码

import re
import os
import pandas as pd

# 初始化存储单条记录的列表
Base = []

for ele in os.listdir('Data/Saison'):
    with open(f'Data/Saison/{ele}', 'r', encoding='utf8') as output:
        contenu = output.read()

    saison = ele.replace('.html', '')
    
    # 提取当前赛季的所有位置
    pattern_pos = '<td class="left first__left strong">(.{1,8})</td>'
    positions = re.findall(pattern_pos, contenu)
    
    # 提取当前赛季的所有球队名称
    pattern_team = '<a class="list-team-entry" href="/fr/basketball/equipe/(.{1,30})" title="(.{1,20})">'
    teams = [e[1] for e in re.findall(pattern_team, contenu)]
    
    # 关键:将同一赛季的位置与球队一一配对,生成单条记录
    for pos, team in zip(positions, teams):
        Base.append({
            'saison': saison,
            'position': pos,
            'equipe': team
        })

# 用字典列表直接生成DataFrame,每条字典对应CSV的一行
df = pd.DataFrame(Base)
df.to_csv('DataFinal/Base.csv', sep='|', encoding='utf8', index=False)

关键改动说明

  1. 移除了全局的Saison、Position、Equipe列表,改为在每个赛季循环内处理该赛季的局部数据,避免数据堆积成大列表。
  2. 使用zip(positions, teams)把同一赛季的位置和球队一一绑定,每条绑定结果以字典形式存入Base,确保每条记录对应一组完整的赛季-位置-球队信息。
  3. 直接用字典列表生成DataFrame,天然匹配CSV「每行一条数据」的格式要求。

注意事项

  • 必须保证positions和teams的数量完全一致,否则zip会截断到较短的列表长度,导致部分数据丢失。如果数量不匹配,需要检查正则表达式是否正确提取了所有目标数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:50:21