如何在不使用panda的情况下将一个csv文件中的列追加到另一个csv文件中?

p4rjhz4m  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(161)

我想从'B.csv'文件附加一列,并把它放到'a.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
kr98yfug

kr98yfug1#

您可以连接从两个CSV文件读取的行,并立即将其传递给writer:

import csv
from operator import concat

with open(r'a.csv') as f1, \
        open(r'b.csv') as f2, \
        open(r'output_1.csv', 'w', newline='') as out:
    f1_reader = csv.reader(f1)
    f2_reader = csv.reader(f2)
    writer = csv.writer(out)
    writer.writerow(next(f1_reader))  # write column names
    writer.writerows(map(concat, f1_reader, f2_reader))

因此,我们为CSV文件初始化csv.reader(),为输出初始化csv.writer()。(a.csv)* 包含列名,我们使用next()读取它,并传递给.writerow(),将它们写入输出,而不做任何修改。然后使用map(),我们可以同时迭代两个读取器,应用operator.concat()连接从两个读取器返回的行。我们可以将它直接传递给.writerows(),并让它使用map()返回的生成器。

y1aodyip

y1aodyip2#

如果只有panda无法使用,那么使用convtools库中的Table helper(github)会很方便。

from convtools.contrib.tables import Table
from convtools import conversion as c

(
    Table.from_csv("tmp/1.csv", header=True)
    # this step wouldn't be needed if your first file wouldn't have missing
    # "number" column
    .drop("number")
    .zip(Table.from_csv("tmp/2.csv", header=["number"]))
    .into_csv("tmp/results.csv")
)

相关问题