Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 写入CSV,获取;错误:需要转义“;对于空白字符串_Python_Csv - Fatal编程技术网

Python 写入CSV,获取;错误:需要转义“;对于空白字符串

Python 写入CSV,获取;错误:需要转义“;对于空白字符串,python,csv,Python,Csv,当有人发现我做错了什么时,我可能会感到非常愚蠢,但我发现自己无法战胜看起来应该是一个简单错误的东西 我正在用Python将一些数据写入CSV。我想写的东西之一是整数的列表。在将列表写入文件之前,我将其连接到字符串中: with open('publishers.csv', 'wb') as f: writer = csv.writer(f, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='') for item in big_l

当有人发现我做错了什么时,我可能会感到非常愚蠢,但我发现自己无法战胜看起来应该是一个简单错误的东西

我正在用Python将一些数据写入CSV。我想写的东西之一是整数的
列表。在将列表写入文件之前,我将其连接到字符串中:

with open('publishers.csv', 'wb') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='')
    for item in big_list_of_objects:
        description = item.description
        number_list = item.number_list
        formatted_numbers = "-".join(number_list)
        writer.writerow([
            description,
            formatted_numbers
            ])
number\u列表
中可能包含从零到一整串数字的任意位置。如果是空列表,
join
仅将
格式化的\u编号设置为等于空字符串。如果不是空列表,我会得到一个由连字符连接的整数组成的字符串

number_list = [1,2,34,12]
formatted_numbers = '1-2-34-12'

number_list = []
formatted_numbers = ''
无论如何,这就是我的想法。实际上,前五行写入成功,然后我得到:

File "<console>", line 1, in <module>
  File "/path/path/path.py", line 500, in offending_function
    formatted_numbers
Error: need to escape, but no escapechar set
结果是:

Description for 'p89' is u''
Now formatting '' for 'p89'
''
Description for 'p88' is u''
Now formatting '' for 'p88'
''
Description for 'p83' is u''
Now formatting '' for 'p83'
''
Description for 'p82' is u'in-tr-t91411'
Now formatting '' for 'p82'
''
Description for 'p81' is u''
Now formatting '' for 'p81'
''
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/path/path/path.py", line 501, in offending_function
    formatted_numbers
Error: need to escape, but no escapechar set
“p89”的描述为“u” 现在为“p89”设置“”的格式 '' “p88”的说明为“u” 现在将“”格式化为“p88” '' “p83”的说明为“u” 现在为“p83”设置“”的格式 '' “p82”的说明为u'in-tr-t91411' 现在为“p82”设置“”的格式 '' “p81”的说明为“u” 现在为“p81”设置“”的格式 '' 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/path/path/path.py”,第501行,在有问题的函数中 格式化的数字 错误:需要转义,但未设置转义

p81
未写入CSV-这是崩溃发生的地方。但是,正如您所看到的,
print repr(格式化的数字)
显示它是一个与之前相同的空白字符串。项目
p81
没有
说明
(只是一个空白字符串),但它前面的项目有
说明

这个问题很可能发生,因为您的
说明
中包含
|
,这也是您的csv的分隔符。因此,csv正在尝试对其进行转义,但无法转义,因为未设置
csv.escapechar
s。在我的计算机中显示相同问题的示例-

>>> description = 'asda|sd'
>>> formatted_numbers = ''
>>> with open('a.csv','w') as f:
...     writer = csv.writer(f, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='')
...     writer.writerow([
...             description,
...             formatted_numbers
...             ])
...
Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
_csv.Error: need to escape, but no escapechar set
或者,另一个修复方法是在尝试编写描述之前删除描述中的
|
,如果您在描述字段中确实不需要它-

description = description.replace('|','')

或者,您可以使用
csv.quote_all
而不是
csv.quote_NONE
引用所有字段,以提供有效的
quotechar

您在哪一行上得到错误?错误会出现在
格式化的\u编号
输入
writer.writerow()
的行上。我已经编辑了第一个代码段以反映我在这方面使用的格式,现在回溯应该更有意义了。发生错误时是否可以打印出行的描述?向脚本中添加了一些打印语句并在结果中编辑。周围的任何字段中都没有管道字符。请尝试将escapechar设置为某个值,就像我在示例中所做的那样,让完整的csv写入,然后检查用escape char写入的内容?好的,我现在了解问题所在。有人偷偷地将一辆马车返回到其中一个描述中,这使得编码非常不愉快。将
.encode('utf-8')
添加到受影响的字段中就成功了。我发现这一点要感谢你建议添加转义字符并检查CSV。我对CSV模块非常陌生,没有想到这一点。非常感谢。非常感谢你。我遇到了另一个问题:每当字符串中有引号时,我的csv文件都是用双引号保存的。现在已经修好了。:)注意:TypeError:“escapechar”必须是1个字符的字符串,因此“\\”将不起作用。
writer = csv.writer(f, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='',escapechar='\\')    #Or any other appropriate escapechar
description = description.replace('|','')