python - 从 csv 文件中删除一行

标签 python csv

name = input("Enter a name : ")
fieldnames = ["first_name", "number"]
with open('names.csv') as csvfile, open('output.csv', 'w') as outputfile:
    reader = csv.DictReader(csvfile, fieldnames=fieldnames)
    writer = csv.DictWriter(outputfile, fieldnames=fieldnames)
    for line in reader:
        if name not in line:
            fieldnames = ["name", "number"]
            writer.writeheader()
            writer.writerow({'first_name': row['first_name'],
                             'number': row['number']})
with open('names.csv', 'w') as csvfile, open('output.csv') as outputfile:
    reader = csv.DictReader(outputfile, fieldnames=fieldnames)
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    for row in reader:
        fieldnames = ['first_name', 'number']
        writer.writeheader()
        writer.writerow({'first_name': row['first_name'],
                         'last_name': row['number']})

这是我到目前为止编写的代码。我想将其中不包含名称变量的行写入输出文件并将其写回到csv文件(names.csv)

James Smith,2025550131
Kevin Harris,2025550105

这就是我的 csv 文件的样子。

first_name,last_name
James Smith,2025550131
first_name,last_name
James Smith,2025550131

这是我运行代码后的名称.csv 文件。

最佳答案

row 未在您的第一个写入循环中声明,因此在 IDE 中运行它可能会记住半成功尝试的输出,并且您会遇到一个奇怪的问题。

您每次还编写标题。只是不要这样做,它是默认完成的。

另外:您正在与进行比较,而不是与值进行比较。 if name not in row: 检查名称是否为键,这种情况不会发生,键为 "first_name"、"number"

您需要执行if name != row['first_name']:

最后但并非最不重要的一点是,无需再次读/写文件来替换输入,只需执行 shutil.move 即可用输出覆盖。

我的修复建议(注意newline='',使用 python 3 时效果更好,以避免在某些不太最新的版本上出现空行):

import shutil,csv

name = input("Enter a name : ")
fieldnames = ["first_name", "number"]
with open('names.csv') as csvfile, open('output.csv', 'w',newline='') as outputfile:
    reader = csv.DictReader(csvfile, fieldnames=fieldnames)
    writer = csv.DictWriter(outputfile, fieldnames=fieldnames)
    for row in reader:   # row, not line !!
        if name != row['first_name']:
            writer.writerow({'first_name': row['first_name'], 'number': row['number']})

# replace original file
shutil.move('output.csv','names.csv')

关于python - 从 csv 文件中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468651/

相关文章:

vba - Excel 宏 - 将工作表导出到 Windows 逗号分隔的 CSV

python - 为什么用 Pandas 写入时 CSV 文件比 HDF5 文件小?

python - 如何在 Python 中运行/与 Golang 可执行文件交互?

python - 如何在aiohttp服务器应用程序中实现current_request

python - 无法访问数据框列

Java:如何从ArrayList写入csv文件

python - 在循环中跳过多次迭代

python - 删除列表中的匹配项目

php - 使用 PHP 读取 CSV 文件时字符串长度不正确

php - 我如何在 php 中写新行\r\n?