为什么代码不仅删除 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)
看来这有效:
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/