【问题标题】:newline works with windows but not linux换行符适用于 Windows 但不适用于 linux
【发布时间】:2017-06-14 06:24:38
【问题描述】:
with open('call.txt', newline='') as inputfile:
    phoneNumbers = list(csv.reader(inputfile))

这个sn-p代码在windows下工作,但是linux/BSD我得到一个错误

异常“未处理的类型错误” 'newline' 是此函数的无效关键字参数

如何将其重写为跨平台?

【问题讨论】:

标签: python cross-platform


【解决方案1】:

谢谢大家是正确的。我有两个版本的 python 2 和 3,系统默认为 2。删除 python2 解决了这个问题。

【讨论】:

    【解决方案2】:

    听起来您正在使用两个不同版本的 Python,2.x 和 3.x。不幸的是,您必须如何打开 csv 文件取决于正在使用的文件——在 Python 3 上,您需要指定 newline='',但在 Python 2 中则不需要,因为它不是 open() 的有效关键字参数。

    这是我用来打开适用于两个版本的 csv 文件的方法:

    import sys
    
    def open_csv(filename, mode='r'):
        """ Open a csv file proper way (depends on Python verion). """
        kwargs = (dict(mode=mode+'b') if sys.version_info[0] == 2 else
                  dict(mode=mode, newline=''))
        return open(filename, **kwargs)
    
    # sample usage    
    csvfile = open_csv('test.csv')
    

    【讨论】:

    • @cdarke:您的链接答案中的逻辑看起来非常相似(但目前硬编码仅用于写入文件)。 IMO,虽然将版本检查移出函数可能更有效,但打开 csv 文件并不是大多数程序经常做的事情,值得尝试优化(并创建全局变量来保存结果)。
    【解决方案3】:

    问题不在于 Windows 与 Linux/BSD,而是 Python 3 与 Python 2。

    open() 的 newline 参数是在 Python 3 中添加的,但在 Python 2 中不存在。您应该选择一个并在脚本中定位一致的 Python 版本。

    【讨论】:

      【解决方案4】:

      您可能在 linux 上运行了较旧版本的 python。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 2021-05-02
        • 2011-06-15
        相关资源
        最近更新 更多