2016-08-21 12 views
-2

Это мой код:Почему возникает ошибка to_csv?

with open('myData', 'a') as f: 
    if count1 == 1: 
     df.to_csv(f,index=False, quoting=3) 
    else: 
     df.to_csv(f,index=False, quoting=3 , header = False) 


Error: need to escape, but no escapechar set 

Как я могу решить эту проблему? Я думаю, что нужно изменить процитировать в None и кавычки в "" Могу ли я иду в правильном направлении

Это полный отслеживающий:.?

--------------------------------------------------------------------------- 
Error          Traceback (most recent call last) 
<ipython-input-22-7b964e5d0ae8> in <module>() 
27   action.perform() 
28   html = browser.page_source 
---> 29   ScrapePage(html) 

<ipython-input-20-1d50d699fe76> in ScrapePage(html) 
56  with open('myData', 'a') as f: 
57   if count1 == 1: 
---> 58    df.to_csv(f,index=False, quoting=3) 
59   else: 
60    df.to_csv(f,index=False, quoting=3 , header = False) 

C:\Anaconda2\lib\site-packages\pandas\core\frame.pyc in to_csv(self, path_or_buf, sep, 
na_rep, float_format, columns, header, index, index_label, mode, encoding, compression, 
quoting, quotechar, line_terminator, chunksize, tupleize_cols, date_format, doublequote, 
escapechar, decimal, **kwds) 

1330          escapechar=escapechar, 
1331          decimal=decimal) 
-> 1332   formatter.save() 
1333 
1334   if path_or_buf is None: 

C:\Anaconda2\lib\site-packages\pandas\core\format.pyc in save(self) 
1504 
1505    else: 
-> 1506     self._save() 
1507 
1508   finally: 

C:\Anaconda2\lib\site-packages\pandas\core\format.pyc in _save(self) 
1604     break 
1605 
-> 1606    self._save_chunk(start_i, end_i) 
1607 
1608  def _save_chunk(self, start_i, end_i): 

C:\Anaconda2\lib\site-packages\pandas\core\format.pyc in _save_chunk(self, start_i, end_i) 
1631           quoting=self.quoting) 
1632 
-> 1633   lib.write_csv_rows(self.data, ix, self.nlevels, self.cols, self.writer) 
1634 
1635 # from collections import namedtuple 

pandas\lib.pyx in pandas.lib.write_csv_rows (pandas\lib.c:19840)() 

Error: need to escape, but no escapechar set 

Причина для записи в формате CSV в if: else: потому что я должен написать несколько файлов данных в один и тот же файл.Я использую счет, чтобы проверить, является ли его первая запись или нет.

+1

Просьба предоставить полную отслеживающий. – albert

+0

Вы используете панды? Можете ли вы показать полную трассировку - гораздо предпочтительнее выбрать фразу –

ответ

1

Опция quoting=3 эквивалентна quoting=csv.QUOTE_NONE. Это инструкция никогда не указывать поля. любое из полей содержит разделитель (запятая), тогда запятая должна будет сбежать. Однако нет никакого escape-набора, и это вызывает ошибку. Documentation for csv quote constants

Вы можете установить escapechar df.to_csv(f,index=False, quoting=3, escapechar=r'\'), например, использовать обратную косую черту, чтобы избежать появления каких-либо запятых, или вы можете использовать другое значение для цитирования. quoting=csv.QUOTE_MINIMAL (или quoting=0) будут использовать кавычки только для тех полей, которые их требуют.

Чтобы дать конкретный пример, предположим, что у вас есть dataframe с двумя строками и двумя столбцами:

2015 "eggs and spam" 
2016 "eggs, bacon and spam" 

В CSV-файл с quoting=0 вы получите (кавычки, используемые вокруг поля, содержащие запятую)

2015,eggs and spam 
2016,"eggs, bacon and spam" 

с quoting=3, escapechar=r"\" вы получите: ("\" используется, чтобы избежать запятой)

2015,eggs and spam 
2016,eggs\, bacon and spam 

Но с quoting=3 и без escapechar вы получаете сообщение об ошибке.

Наилучшим решением было бы использовать quoting=0

+0

Я все еще не понимаю, почему мне нужно дать символ побега и что это будет делать? Не могли бы вы рассказать немного больше? – EL323

+0

Я добавил несколько примеров. Вам нужен escapechar, потому что одно из ваших полей содержит запятую или цитату. –

+0

* «Лучшим решением было бы использовать quoting = 0» *, что очень редко является лучшим решением по той же самой причине, с которой вы пытаетесь работать: кавычки затем могут быть экранированы при чтении файла снова (или по крайней мере, один должен обратить внимание на то, что во входном файле есть кавычки и их прочитать соответственно). – gented

Смежные вопросы