Python。代码在 csv 文件中每行后留下空白行

标签 python csv

为什么代码不仅删除 WinningRows,还删除 csv 标题行并在每行后留下空白行?如何修复它?我只需要删除winningRows,不需要空白行。

def generate():
    global winningRows
    filename = enterFile()

    noOfWinners = 5
    winningNumbers = []
    while len(winningNumbers) < noOfWinners:
        luckyNumber = random.randint(1, totalEntries)
        if luckyNumber not in winningNumbers:
            winningNumbers.append(luckyNumber)

    with open(filename, newline="") as entriesCSV:
        entriesDict = csv.DictReader(entriesCSV,dialect="excel")
        allRows = [row for row in entriesDict]
        winningRows = [row for row in allRows if int(row["#"]) in winningNumbers]
        nonWinningRows = [row for row in allRows if int(row["#"]) not in winningNumbers]
        for row in winningRows:
            winnerName = row["Name"]
            winnerID = row["ID"]
            winnerEmail = row["Email"]
            print(f"The winner is {winnerName}, ID {winnerID}, email {winnerEmail}")

        csv.DictWriter(open(filename, "w"), fieldnames=["#", "Name", "ID", "Email"]).writeheader()
        csv.DictWriter(open(filename, "w"), fieldnames=["#", "Name", "ID", "Email"]).writerows(nonWinningRows)

csv before running the code

csv after running the code

看来这有效:

with open(filename, newline='\n') as entriesCSV:
    entriesDict = csv.DictReader(entriesCSV,dialect="excel")
    allRows = [row for row in entriesDict]
    winningRows = [row for row in allRows if int(row["#"]) in winningNumbers]
    nonWinningRows = [row for row in allRows if int(row["#"]) not in winningNumbers]
    for row in winningRows:
        winnerName = row["Name"]
        winnerID = row["ID"]
        winnerEmail = row["Email"]
        print(f"The winner is {winnerName}, ID {winnerID}, email {winnerEmail}")

with open(filename, "w", newline='\n') as entriesCSV:
    writer = csv.DictWriter(entriesCSV, fieldnames=["#", "Name", "ID", "Email"])
    writer.writeheader()
    writer.writerows(nonWinningRows)

但在这种情况下,我打开文件两次,对吧?

最佳答案

看起来您使用的是 Windows。将 newline 参数添加到您的 open 函数中。

with open(filename, "w", newline='\n') as fp:
    writer = csv.DictWriter(fp, fieldnames=["#", "Name", "ID", "Email"])
    writer.writeheader()
    writer.writerows(nonWinningRows)

关于Python。代码在 csv 文件中每行后留下空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71793386/

相关文章:

php - 在数组中显示 csv 文件

Python 装饰器 : howto list wrapped functions by decorator

python - 按 Pandas 中的位置提取数字?

Python - 使用csv模块重写后CSV文件为空

python - 拆分 .csv,同时保留描述第一行

python - 从 CSV 创建特定格式的 JSON 文件

python - 在 Python 中对数据进行排序并从 CSV 文件生成表输出

python - Flask 应用程序使用错误的 Python 解释器 - 需要知道如何 "compile"mod_wsgi 才能使用特定的 Python 版本

python - 为什么在将 Python 中的生成器传递给函数时可以省略周围的括号?

python - 找到最小窗口子串