繁体   English   中英

如何使用 csv 模块读取和写入 csv 文件

[英]how to read from and write to a csv file using csv module

import csv

with open("C:\\Users\\ki386179\\Desktop\\output.csv","r") as f:
    reader = csv.reader(f)
    for row in reader:
        if 'india' in row:
            pass
        if 'india' not in row:
            with open("C:\\Users\\ki386179\\Desktop\\output.csv","w") as f:
                writer = csv.writer(f)
                writer.writerow('india')

我试图实现这样的事情,检查特定列中的特定值,如果没有写入它。

当您正在读取文件时,您无法写入文件。 另外,您肯定不想像当前的逻辑那样要求每一行都包含字符串吗?

如果没有任何行匹配,我猜您想在最后添加一行:

import csv

seen_string = False

with open("C:\\Users\\ki386179\\Desktop\\output.csv","r") as f:
    reader = csv.reader(f)
    for row in reader:
        if 'india' in row:
            seen_string = True
            break

if not seen_string:
    # Notice append mode; "a" not "w"
    with open("C:\\Users\\ki386179\\Desktop\\output.csv","a") as f1:
        # Noice this one is f1
        writer = csv.writer(f1)
        writer.writerow('india')

也许还注意到in寻找一个子串; 如果文件包含例如amerindian",则代码会将其视为匹配项。如果这是您想要的,请使用==检查字符串是否相等。

您可以使用r+模式进行读取和写入。 尽管很难理解您在此处尝试实现的目标,但下面显示了可以完成您可能尝试实现的目标的示例代码。 我将上面的代码放在脚本india.py并使其可执行( chmod +x india.py

#!/usr/bin/env python

import sys
from csv import reader, writer

with open(sys.argv[1], "r+") as f:
    for row in reader(f):
        if "india" in row:
            break
    else:
        writer(f).writerow("india")

试运行

$ cat test_write.csv
us,canada,mexico
france,germany,norway
brazil,argentina,colombia
china,japan,korea
$ ./india.py test_write.csv
$ cat test_write.csv
us,canada,mexico
france,germany,norway
brazil,argentina,colombia
china,japan,korea
i,n,d,i,a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM