如何用Python将CSV中的十进制数批量转换为二进制并导出CSV
这里给你整合出完整的CSV处理方案,基于你提供的转换函数,同时修正了原代码里的小问题(比如重复定义main函数):
完整代码
import csv def dec2bin(number: int) -> str: if number == 0: return "0" ans = "" while number: ans += str(number & 1) number = number >> 1 return ans[::-1] def process_csv(input_path: str, output_path: str, column_index: int = 0): # 读取输入CSV并转换 with open(input_path, mode='r', newline='', encoding='utf-8') as infile: reader = csv.reader(infile) # 准备输出数据,保留表头(如果有) output_rows = [] for row_num, row in enumerate(reader): if row_num == 0: # 假设第一行是表头,追加二进制列名 output_rows.append(row + ["二进制值"]) continue try: # 取出指定列的十进制数,转成整数 dec_num = int(row[column_index]) bin_str = dec2bin(dec_num) # 追加转换后的二进制值到当前行 output_rows.append(row + [bin_str]) except ValueError: # 处理非数字的行,直接保留原行并标记错误 output_rows.append(row + ["[非有效数字]"]) # 写入输出CSV with open(output_path, mode='w', newline='', encoding='utf-8') as outfile: writer = csv.writer(outfile) writer.writerows(output_rows) if __name__ == "__main__": # 替换成你的输入、输出CSV路径 INPUT_CSV = "input_decimals.csv" OUTPUT_CSV = "output_binaries.csv" # 如果你的十进制数不在第0列,修改这里的索引(从0开始计数) TARGET_COLUMN = 0 process_csv(INPUT_CSV, OUTPUT_CSV, TARGET_COLUMN)
关键说明
- 函数修正:把原
dec2bin返回的0改成了字符串"0",确保所有返回值都是字符串类型,避免写入CSV时出现格式不一致的问题。 - CSV处理逻辑:
- 使用Python标准库
csv模块,无需额外安装第三方包 - 自动保留原CSV的表头(如果有),并新增"二进制值"列
- 加入了异常处理:遇到非数字的行会标记
[非有效数字],不会直接崩溃 - 可以通过
TARGET_COLUMN参数指定要转换的列(索引从0开始,比如第1列填1)
- 使用Python标准库
- 使用方法:
- 把你的CSV文件路径替换到
INPUT_CSV和OUTPUT_CSV变量 - 确认目标列的索引,调整
TARGET_COLUMN - 直接运行脚本即可
- 把你的CSV文件路径替换到
原代码的小问题修正
你原来的代码里重复定义了两次main函数,这会导致只有最后一个main生效,已经在上面的代码里移除了重复定义,换成了处理CSV的逻辑。
内容的提问来源于stack exchange,提问作者Zak Meshou
相关产品推荐
相关产品推荐

