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

如何通过循环批量按字母分类读取CSV文件并解决报错

解决方案:自动化读取按字母分类的CSV并去重合并

问题根源分析

出现的TypeError: can only concatenate str (not "list") to str错误,核心原因是字典中每个字母对应的file_list[i]是一个文件列表,直接将其与路径字符串拼接会导致类型不匹配。此外,报错代码里的readout[file_list]是错误的索引方式,应该用字母键来存储对应数据。

方案一:修复字典版实现

保留按字母分类的字典结构,正确遍历每个字母下的文件并完成读取、去重与合并:

1. 生成按字母分类的文件字典

import os
import pandas as pd

csv_directory = "你的CSV文件夹路径"
# 生成a-z字母列表
alfabet = [chr(ord('a') + i) for i in range(26)]
file_dict = {}

for char in alfabet:
    # 筛选以当前字母开头、以).csv结尾的文件
    file_dict[char] = [f for f in os.listdir(csv_directory) 
                       if f.endswith(').csv') and f.startswith(char)]
    # 自动删除空列表,避免后续无效处理
    if not file_dict[char]:
        del file_dict[char]

2. 读取所有文件并去重合并

# 存储每个字母对应的合并DataFrame
combined_dict = {}
# 存储所有字母的最终合并结果
final_combined = pd.DataFrame()

for char, files in file_dict.items():
    temp_frames = []
    for file in files:
        # 用os.path.join拼接路径,适配不同系统的路径分隔符
        file_path = os.path.join(csv_directory, file)
        df = pd.read_csv(file_path, skiprows=27)
        # 按指定字段去重
        df_clean = df.drop_duplicates(subset=['prot_acc','prot_score','prot_cover'])
        temp_frames.append(df_clean)
    # 合并当前字母下的所有文件
    combined_df = pd.concat(temp_frames, axis=0, ignore_index=True)
    combined_dict[char] = combined_df
    # 合并到最终总表
    final_combined = pd.concat([final_combined, combined_df], axis=0, ignore_index=True)

方案二:优化列表版实现

如果不需要按字母分类存储,直接生成所有符合条件的文件列表,再统一处理:

1. 生成非空的文件列表

import os
import pandas as pd

csv_directory = "你的CSV文件夹路径"
alfabet = [chr(ord('a') + i) for i in range(26)]
all_files = []

for char in alfabet:
    matched_files = [f for f in os.listdir(csv_directory) 
                     if f.endswith(').csv') and f.startswith(char)]
    # 仅添加非空的文件列表
    if matched_files:
        all_files.extend(matched_files)

2. 读取并合并所有文件

final_combined = pd.DataFrame()

for file in all_files:
    file_path = os.path.join(csv_directory, file)
    df = pd.read_csv(file_path, skiprows=27)
    df_clean = df.drop_duplicates(subset=['prot_acc','prot_score','prot_cover'])
    final_combined = pd.concat([final_combined, df_clean], axis=0, ignore_index=True)

关键优化点

  • 用os.path.join拼接文件路径,避免因系统差异(Windows/Linux)导致的路径错误
  • 自动过滤空的文件列表,减少无效处理步骤
  • 先收集所有去重后的DataFrame再一次性concat,比循环中反复合并效率更高(数据量大时优势更明显)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:10:14