不使用Pandas将CSV列追加至另一CSV时仅添加单个字符的问题排查
问题:将b.csv的列追加到a.csv的number列下时仅添加单个字符
我需要将b.csv中的列追加到a.csv的“number”列下,但当前代码仅添加单个字符而非完整字符串。已尝试谷歌搜索但未找到解决方案,以下是我的代码及两个CSV文件的内容:
原代码
f = open('b.csv') default_text = f.read() with open('a.csv', 'r') as read_obj, \ open('output_1.csv', 'w', newline='') as write_obj: csv_reader = reader(read_obj) csv_writer = writer(write_obj) for row in csv_reader: row.append(default_text[8]) csv_writer.writerow(row)
a.csv内容
name,age,course,school,number Leo,18,BSIT,STI Rommel,23,BSIT,STI Gaby,33,BSIT,STI Ranel,31,BSIT,STI
b.csv内容
1212121 1094534 1345684 1093245
问题原因
你当前的代码错误在于把b.csv整个文件读成了一个字符串default_text,然后通过default_text[8]取单个字符(字符串索引按字符位置取值),自然每次只能追加一个字符,而非b.csv里的完整行内容。
修正方案
正确的做法是分别读取两个CSV的行,将b.csv的每行内容对应追加到a.csv的行中。以下提供两种可行写法:
写法一:先读取b.csv所有内容到列表(适合小文件)
import csv # 读取b.csv的所有数字,存入列表 with open('b.csv', 'r') as b_file: b_reader = csv.reader(b_file) b_numbers = [row[0].strip() for row in b_reader] with open('a.csv', 'r') as read_obj, open('output_1.csv', 'w', newline='') as write_obj: csv_reader = csv.reader(read_obj) csv_writer = csv.writer(write_obj) # 写入表头(a.csv表头已有number列,无需修改) csv_writer.writerow(next(csv_reader)) # 逐行配对追加数字 for row, number in zip(csv_reader, b_numbers): row.append(number) csv_writer.writerow(row)
写法二:同时逐行读取两个文件(适合大文件,内存占用低)
import csv with open('a.csv', 'r') as read_obj, \ open('b.csv', 'r') as b_obj, \ open('output_1.csv', 'w', newline='') as write_obj: csv_reader = csv.reader(read_obj) b_reader = csv.reader(b_obj) csv_writer = csv.writer(write_obj) # 写入表头 csv_writer.writerow(next(csv_reader)) # 逐行读取并配对写入 for a_row, b_row in zip(csv_reader, b_reader): # 取b.csv当前行的第一个元素(完整数字字符串)追加到a.csv行中 a_row.append(b_row[0].strip()) csv_writer.writerow(a_row)
效果说明
两种写法都会将b.csv中的每行数字完整追加到a.csv对应行的number列位置,最终生成的output_1.csv内容如下:
name,age,course,school,number Leo,18,BSIT,STI,1212121 Rommel,23,BSIT,STI,1094534 Gaby,33,BSIT,STI,1345684 Ranel,31,BSIT,STI,1093245
内容的提问来源于stack exchange,提问作者qwerty-uiop
相关产品推荐
相关产品推荐

