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

Python提取CSV指定列写入新文件时输出为None,求解决方案

解决CSV提取指定列并写入新文件的问题

我来帮你分析下代码里的问题,然后给出正确的实现方式:

你的代码为什么会输出None?

  1. print()的返回值是None:你写了data=print(row[col]),但print()函数的作用是把内容输出到控制台,它本身的返回值永远是None,所以data变量一直是None,写入文件的自然就是这个值。
  2. 文件打开模式错误:每次循环都用open("test2.txt", "w")打开文件,w模式会清空文件原有内容再写入,所以即使你之前有正确的数据,也会被覆盖,最后只留下最后一次写入的None。
  3. 逻辑顺序错误:你逐个列处理数据,而不是按行提取需要的两列再写入,这样会把同一行的date和data1拆分成单独的行,不符合CSV的格式要求。

正确的实现代码

这里有两种简洁可靠的方式,你可以根据需求选择:

方式一:使用csv.DictReader和csv.DictWriter(可读性更高)

这种方式适合需要按列名提取数据的场景,代码更直观:

import csv
import os

os.chdir(mydir)  # 确保mydir是你已经定义好的目标目录
column_names = ["date", "data1"]

# 同时打开输入和输出文件,newline=''避免写入时产生空行
with open("my.csv", "r") as infile, open("test2.csv", "w", newline='') as outfile:
    # 用DictReader读取原文件,自动将表头作为键
    reader = csv.DictReader(infile)
    # 初始化DictWriter,指定要写入的列名
    writer = csv.DictWriter(outfile, fieldnames=column_names)
    
    # 先写入新文件的表头
    writer.writeheader()
    
    # 遍历每一行,提取指定列的数据并写入
    for row in reader:
        # 构造只包含目标列的字典
        selected_data = {col: row[col] for col in column_names}
        writer.writerow(selected_data)

方式二:使用普通csv.reader和csv.writer(性能略优)

如果你的CSV文件很大,这种通过索引提取列的方式效率会更高:

import csv
import os

os.chdir(mydir)
column_names = ["date", "data1"]

with open("my.csv", "r") as infile, open("test2.csv", "w", newline='') as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    
    # 获取第一行表头,找到目标列的索引
    header = next(reader)
    col_indices = [header.index(col) for col in column_names]
    
    # 写入新文件的表头
    writer.writerow(column_names)
    
    # 遍历每一行,提取对应索引的列并写入
    for row in reader:
        selected_row = [row[index] for index in col_indices]
        writer.writerow(selected_row)

几个关键注意点

  • 尽量用with语句管理文件,它会自动帮你关闭文件,避免资源泄漏。
  • 写入CSV时加上newline='',这是Python官方推荐的写法,可以避免在不同操作系统下产生多余的空行。
  • 不要手动拼接CSV内容(比如用逗号分隔),用csv模块的Writer类可以自动处理包含逗号、引号的特殊数据,保证格式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:28:12