Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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,是否可以使用.replace()预先处理双引号转义问题_Python_Pandas_Csv_Double Quotes - Fatal编程技术网

Python转换为_csv,是否可以使用.replace()预先处理双引号转义问题

Python转换为_csv,是否可以使用.replace()预先处理双引号转义问题,python,pandas,csv,double-quotes,Python,Pandas,Csv,Double Quotes,我正在尝试用python编写一个进程,将数据写入.csv,然后将其BCP到MSSQL数据库中 我使用的基本to_csv命令是: df.to_csv(csv_path, sep = "«", header = False, index = False, line_terminator="[~~]") 我看到的一个问题是程序如何处理文本中的双引号。如果找到一组双引号,则引号将转义 这一行看起来像: 1, 7, Executed Job: "abcdf" Complete 在加载到数据中时

我正在尝试用python编写一个进程,将数据写入.csv,然后将其BCP到MSSQL数据库中

我使用的基本to_csv命令是:

df.to_csv(csv_path, sep = "«", header = False, index = False, line_terminator="[~~]")
我看到的一个问题是程序如何处理文本中的双引号。如果找到一组双引号,则引号将转义

这一行看起来像:

    1, 7, Executed Job: "abcdf" Complete
在加载到数据中时转换为:

    1, 7, "Executed Job: ""abcdf"" Complete"
这是令人沮丧的,因为这意味着如果我想使用BCP后的数据,我需要在SQL端进一步处理它。因为我的ETL运行在数百个表上,所以实现它将是一个非常头痛的问题

我想知道在通过pandas dataframe.replace函数运行to_csv命令之前,是否有办法处理数据中的引号。是否有任何选项可以将数据帧中的引号转换为双引号,而不会导致转义问题

例如,以下内容:

df.replace('"','\"')
df.to_csv(csv_path, sep = "«", header = False, index = False, line_terminator="[~~]")
编辑:作为参考,我尝试使用doublequote=False并将csv quoting设置为QUOTE NONE,但两者都会导致“需要转义字符和缺少转义字符”错误。

使用

import csv
...
df.to_csv(..., quoting=csv.QUOTE_NONE)

让您的生活更轻松,并直接从pandas到sql server:pandas到sql的速度要比bcp慢得多。我当前的ETL设置使用的是TOU sql,但对于非常大的表,它并没有进行剪切。这是有意义的……遗憾的是,我不相信它有意义:请参阅我添加的编辑。如果我设置quoting=csv.QUOTE_NONE,则会创建转义错误。如果我设置QUOTE_NONE并添加一个新的转义字符,那么它会带来需要删除数据库端字符的问题,这很麻烦。用.replace将此问题扼杀在萌芽状态会容易得多,这样我就可以进行1次代码更改,而不是几十次。我应该指定将编辑主ask:使用quote_none或doublequote=False创建转义字符错误。使用任何转义字符代替引号都会产生同样的“需要在数据库中的事实发生后处理字符”问题。我认为在您的情况下,可能还有一些其他字符应该转义。我使用了您显示的行来测试我的代码,并得到了正确的结果。您可以尝试使用df['z'].replace.compiler'','\\\\'替换。