【问题标题】:Can't get a desired output with csv.writer in python无法在 python 中使用 csv.writer 获得所需的输出
【发布时间】:2013-11-15 15:23:25
【问题描述】:

我花了一整天的时间试图找到解决这个问题的方法,因为我还没有找到解决方案,所以我来这里寻求您的帮助!

我正在 python 上编写一个 CSV 文件导出器,但我无法让它完全按照我想要的方式输出

假设我有一个包含多个教程标题的字符串列表:

    tutorials = ['tut1', 'tut2, 'tut3']

我想在 csv 文件的第一行这样打印:

    First Name, Surname, StudentID, tut1, tut2, tut3

现在,这是我为此编写的代码:

    tutStr= ' '
    for i tutorials:
          tutStr += i + ', '
    tutStr = tutStr[0:-3]

    with open('CSVexport.csv', 'wb') as csvFile:
            writer = csv.writer(csvFile, delimiter=',', quoting=csv.QUOTE_NONE)
            writer.writerow(['First Name'+'Surname'+'ID number'+tutStr)

这给了我错误:
"writer.writerow(['名字'+'姓氏'+'身份证号'+labString]) 错误:需要转义,但没有设置转义字符”

现在,我知道错误与 csv.QUOTE_NONE 有关,我必须设置一个 escapechar,但我真的不明白我应该怎么做。

如果我尝试不使用 QUOTE_NONE,它会自动将 quotechar 设置为 ' " ' 这将给我这个输出

    "First Name, Surname, StudentID, tut1, tut2, tut3"   --> don't want quotation marks!!!

有什么想法吗?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    如果你打算用 writerow 写东西,你需要在那里传递一个列表,而不是一个包含一个用逗号分隔的大字符串的列表(它将在一个单元格中显示为一个字符串)。 quoting=csv.QUOTE_MINIMAL 将有助于引用需要引用的字符串。

    tutorials = ['tut1', 'tut2', 'tut3']
    headers = ['First Name', 'Surname', 'ID number'] + tutorials
    first_line = True
    with open('CSVexport.csv', 'w') as csvFile:
            writer = csv.writer(csvFile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
            if first_line:
               writer.writerow(headers)
               first_line = False
    

    【讨论】:

    • For Python2: "如果 csvfile 是一个文件对象,它必须在不同的平台上使用'b'标志打开。" For Python3: "如果 csvfile 是一个文件对象,它应该用newline='' 打开"。
    猜你喜欢
    • 2021-05-12
    • 2017-07-04
    • 2015-04-06
    • 2022-01-22
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多