如何修改Python脚本从CSV中选取指定列生成新CSV文件
首先需要说明:你当前使用的openpyxl库仅支持处理xlsx/xlsm等Excel格式文件,不支持CSV文件操作。如果你实际需要处理的是Excel文件,只是误写了CSV后缀,可直接调整现有代码实现按列名筛选列;如果确实是处理CSV文件,建议用Python自带的csv模块或者pandas库,实现更简单。
方案1:调整openpyxl代码(适配Excel文件按列名筛选)
修改后的代码如下,你只需修改TARGET_COLUMNS配置项为你需要保留的列名即可:
# 导入openpyxl模块 import openpyxl as xl # -------------------------- 可修改配置项 -------------------------- # 填写需要保留的列名,需和源文件表头完全一致 TARGET_COLUMNS = ["姓名", "年龄", "联系电话"] # 源Excel文件路径 filename = "C:\\Users\\...\\input.xlsx" # 输出Excel文件路径 filename1 = "C:\\Users\\...\\output.xlsx" # ------------------------------------------------------------------ # 读取源文件 wb1 = xl.load_workbook(filename) ws1 = wb1.worksheets[0] # 新建目标工作簿 wb2 = xl.Workbook() ws2 = wb2.active # 读取表头匹配目标列的索引 header = [cell.value for cell in ws1[1]] target_col_index = [idx+1 for idx, col in enumerate(header) if col in TARGET_COLUMNS] max_row = ws1.max_row # 逐行复制指定列 for row_num in range(1, max_row + 1): for new_col_idx, old_col_idx in enumerate(target_col_index, start=1): cell_val = ws1.cell(row=row_num, column=old_col_idx).value ws2.cell(row=row_num, column=new_col_idx).value = cell_val # 保存文件 wb2.save(filename1)
方案2:CSV文件处理(csv模块版本,无需额外安装依赖)
import csv # -------------------------- 可修改配置项 -------------------------- TARGET_COLUMNS = ["姓名", "年龄", "联系电话"] input_csv_path = "C:\\Users\\...\\input.csv" output_csv_path = "C:\\Users\\...\\output.csv" # ------------------------------------------------------------------ with open(input_csv_path, 'r', encoding='utf-8', newline='') as infile, \ open(output_csv_path, 'w', encoding='utf-8', newline='') as outfile: reader = csv.DictReader(infile) writer = csv.DictWriter(outfile, fieldnames=TARGET_COLUMNS) writer.writeheader() for row in reader: writer.writerow({col: row[col] for col in TARGET_COLUMNS})
如果你的CSV文件是GBK编码,将上述代码中的encoding='utf-8'改为encoding='gbk'即可。
方案3:CSV文件处理(pandas版本,代码最简洁)
如果可以安装第三方库,用pandas只需3行代码就能实现:
import pandas as pd TARGET_COLUMNS = ["姓名", "年龄", "联系电话"] # 读取时直接筛选指定列 df = pd.read_csv("input.csv", usecols=TARGET_COLUMNS) # 输出到新CSV,不保存索引列 df.to_csv("output.csv", index=False)
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

