尝试将信息附加到csv文件的列(没有pandas)

prdp8dxp  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(81)

我正在尝试向csv文件的列追加信息。我有一个文本文件夹,我在文件夹中循环,在标题为“百分比”的标题下将单词的百分比(一个浮点数)添加到CSV。csv文件已经有其他标题和行,包含文本标题,年份,ID等信息。我的代码编译但不改变(追加到)csv文件。

with open(sys.argv[2]) as csvfile:
    reader = csv.DictReader(csvfile)
    os.chdir(sys.argv[1])
    for row in reader:
        text = row["id"] + ".txt"  
        if text in novel_folder:
           (omitted this code to save time (calc perc)
           with open(csvfile, "a") as csvfile2:
           writer=csv.DictWriter(csvfile2,fieldnames=["percentage"])
           writer.writerow({"percentage":  perc})

我更改目录是因为这些文本位于我的工作目录中的一个文件夹中。然后循环遍历csv中的每一行,如果该行的id(文本名称)在文本文件夹(sys.argv [1])中,则计算百分比(省略),然后将该百分比附加到csv中的'percentage'标题中。sys.argv [2]是csv文件名,而sys.argv [1]是文本文件夹名。
下面是csv文件的第一行(标题):

author,id,title,year,percentage
6rqinv9w

6rqinv9w1#

不能向CSV文件追加列。相反,您需要用所需的额外数据重写整行。您可以打开目标输出文件一次,然后在处理行时写入。从您读取的CSV文件中获取现有的字段名称,然后在写入时使用这些字段名称加上额外的“百分比”列。
通常最好不要在程序中更改目录。它很容易保持较长的文件名,你不运行的风险,混乱的任何相对路径名在使用中。

in_name = sys.argv[2]
out_name = os.path.join(sys.argv[1], sys.argv[2])

with open(in_name) as csvfile, open(out_name, "a") as csvout:
    reader = csv.DictReader(csvfile)
    writer = csv.DictWriter(csvout, fieldnames=reader.fieldnames + ["percentage"])
    for row in reader:
        text = row["id"] + ".txt"  
        if text in novel_folder:
            perc = (omitted this code to save time \*\* all it did was calculate percentage)
            row["percentage"] = perc
            writer.writerow(row)

相关问题