为什么使用python在CSV文件中写入制表符

2024-06-16 11:51:53 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个包含制表符字符的列表:

mylist = [['line 1', '<a href="//<% serverNames[0].getHostname() %>:'],
          ['line 2', '     <% master.getConfiguration()>']]

当我将列表保存到CSV文件中时,第2行代码中的tab将被写入\t

line | code
-----------------------------------------------------
   1 | <a href="//<% serverNames[0].getHostname() %>:
   2 | \t   <% master.getConfiguration()>

我之所以需要它,是因为我想将代码与其他列表进行比较。所以,我不想用空格等其他字符来替换制表符

我写的代码:

with open('codelist.csv', 'w') as file:
   header = ['line','code']
   writers = csv.writer(file)
   writers.writerow(header)
   for row in mylist:
      writers.writerow(row)

如何解决这类问题


Tags: csv代码master列表linecode字符制表符
1条回答
网友
1楼 · 发布于 2024-06-16 11:51:53

我无法重现Python2或Python3中的确切错误,但我有一个关于可能发生的事情的猜测

根据csv.writerlocated here的文档

All other non-string data are stringified with str() before being written.

此外,请注意,如果提供包含实际制表符的字符串,python str函数会精确地归纳出您所描述的行为:

 >>> str('  ')
 '\t'

当然,您拥有的是字符串数据,但是,上面的文档并没有真正说明other的含义。以下是我在_csv.clocated here中实现writerows的内容:

    if (PyUnicode_Check(field)) {
        append_ok = join_append(self, field, quoted);
        Py_DECREF(field);
    }
    else if (field == Py_None) {
        append_ok = join_append(self, NULL, quoted);
        Py_DECREF(field);
    }
    else {
        PyObject *str;

        str = PyObject_Str(field);
        Py_DECREF(field);
        if (str == NULL) {
            Py_DECREF(iter);
            return NULL;
        }
        append_ok = join_append(self, str, quoted);
        Py_DECREF(str);
    }

因此,我怀疑这里发生的事情是,不知何故,您的列表包含的字符串数据的格式无法识别为unicode字符串,因此无法通过测试中的PyUnicode_Check分支,通过str(在C代码中称为PyObject_Str)发送,并因此嵌入转义序列

因此,您可能需要检查这些数据是如何进入您的列表的

或者,可能我看到的源代码与您使用的Python版本不一致,您使用的是一个版本,比如说,只运行everythingstr

相关问题 更多 >