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

求助:将目录下TXT文件导入DataFrame并保存为CSV的实现问题

解决方案:批量处理TXT文件生成CSV

直接上可运行的简洁代码,完美匹配你的需求:

import os
import csv

# 替换成你的TXT文件所在目录路径,建议用绝对路径避免出错
txt_dir = "./txt_files"  
output_csv = "output.csv"

# 确保输出文件的目录存在(如果输出路径包含子目录)
os.makedirs(os.path.dirname(output_csv), exist_ok=True)

with open(output_csv, "w", newline="", encoding="utf-8") as csv_file:
    writer = csv.writer(csv_file)
    
    # 遍历目录下所有TXT文件
    for filename in os.listdir(txt_dir):
        if filename.endswith(".txt"):
            # 提取不带后缀的文件名
            file_base_name = os.path.splitext(filename)[0]
            # 构建完整文件路径,彻底解决"Errno 2"问题
            file_path = os.path.join(txt_dir, filename)
            
            all_numbers = []
            # 读取文件并收集所有数字
            with open(file_path, "r", encoding="utf-8") as txt_file:
                for line in txt_file:
                    # 分割每行内容,过滤空值,收集所有数字
                    numbers = [num.strip() for num in line.split() if num.strip()]
                    all_numbers.extend(numbers)
            
            # 写入CSV一行:文件名 + 所有合并后的数字
            writer.writerow([file_base_name] + all_numbers)

print("处理完成,CSV文件已生成!")

关键细节说明

  • 路径问题:用os.path.join拼接目录和文件名,这是解决你"Errno 2"报错的核心——之前的错误大概率是直接用文件名而没加目录路径,导致Python在当前工作目录找不到文件。
  • 文件名处理:os.path.splitext是Python内置的可靠方法,自动去掉文件后缀,不用手动截取字符串。
  • 内容合并:遍历每个TXT的每一行,不管每行有几个数字,全部收集到一个列表里,最后和文件名组成CSV的一行,完全符合"每个TXT对应CSV一行"的需求。
  • CSV格式:用csv.writer自动处理逗号分隔逻辑,避免手动拼接字符串导致的格式混乱。

常见问题排查

  1. Errno 2报错:
    • 检查txt_dir是否为正确路径,优先用绝对路径(比如C:/Users/你的用户名/txt_files或/home/你的用户名/txt_files)。
    • 确认目录内确实有.txt文件,且文件名没有全角空格、特殊符号这类容易导致识别失败的内容。
  2. 只处理首个文件:
    • 之前的代码可能在循环内写了break,或者缩进错误(比如文件处理代码不在循环块里),上面的代码会遍历所有符合条件的TXT文件。
  3. 数字格式调整:
    • 如果需要把数字转成整数/浮点数,把numbers = [num.strip() ...]改成numbers = [int(num.strip()) ...]或float()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:50:24