TypeError: 'newline'是此函数的无效关键字参数,尝试打开文件时出现该错误。

15

我编写了以下代码,它可以提取文件信息并根据第二列对象按字母顺序排序:

import csv
import operator
import sys

def re_sort(in_file='books.csv', out_file='books_sort.csv'):
    data = csv.reader(open('books.csv', newline=''), delimiter=',')
    header = next(data)
    sortedlist = sorted(data, key=operator.itemgetter(1))
    with open("books_sorted.csv", "w", newline='') as csvfile:
        cvsWriter = csv.writer(csvfile, delimiter=',')
        cvsWriter.writerow(header)
        cvsWriter.writerows(sortedlist)
每当我尝试在命令行上运行这段代码时,它会给出TypeError错误:'newline'是该函数的无效关键字参数。您是否看到可能发生这种情况的原因。以下是文件内容的结构化版本:
Title,            Author,        Publisher,  Year,  ISBN-10,   ISBN-13
Automate the...,  Al Sweigart,   No Sta...,  2015,  15932...,  978-15932...
Dive into Py...,  Mark Pilgr..., Apress,     2009,  14302...,  978-14302...
"Python Cook...,  "David Bea..., O'Reil...,  2013,  14493...,  978-14493...
Think Python...,  Allen B. D..., O'Reil...,  2015,  14919...,  978-14919...
"Fluent Pyth...,  Luciano Ra..., O'Reil...,  2015,  14919...,  978-14919...

这可能会对你有所帮助:输入链接描述 - Tyler_P
请参考 Stack Overflow 上的类似文章。https://dev59.com/YF0a5IYBdhLWcg3w48FP - coderWorld
将 newline='\n' 替换为 lineterminator='\n'。 - user3358107
2个回答

25

open 内置函数在 Python 3 中加入了 newline 关键字。鉴于此,我猜测您正在使用 Python 2 运行脚本。

为了解决问题:

  1. 确保您至少拥有 Python v3.2 (https://docs.python.org/release/3.2/library/functions.html#open),
  2. 并使用正确的 Python 版本运行您的程序,例如:python3 myscript.py

-3

这基本上是一个仅包含链接的回答。请总结链接内容。 - Mad Physicist
这个链接包含了解决我的问题的方法。通过将“w”更改为“wb”,我能够完全消除换行符。 - user10200421
一个满足提问者的答案怎么会被无故地获得负评而没有任何解释呢? - Tyler_P
如果那个问题解决了问题,那么这个问题应该被关闭为另一个问题的副本,而不是作为指向另一个问题的答案。 - phuclv
@Tyler_P: 因为原帖问题涉及误用Python 2的open()而非与此无关的Python 3的csv writer。(问答者对根本原因存在误解,这是常有的事情。) - smci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接