2016-02-19 2 views
1

Я пытаюсь написать все обращения тега в файл csv в Python. Моя строка:Python записывает часть строки в строку csv

<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@CDIUI</span>(<span class="string"><span class="delimiter">"</span><span class="content">cdievents</span><span class="delimiter">"</span></span>) 
<span class="annotation">@Theme</span>(<span class="string"><span class="delimiter">"</span><span class="content">valo</span><span class="delimiter">"</span></span>) 
<span class="directive">public</span> <span class="type">class</span> <span class="class">CDIEventUI</span> <span class="directive">extends</span> UI { 
    <span class="annotation">@Inject</span> 
    InputPanel inputPanel; 

    <span class="annotation">@Inject</span> 
    DisplayPanel displayPanel; 

    <span class="annotation">@Override</span> 
    <span class="directive">protected</span> <span class="type">void</span> init(VaadinRequest request) { 
     Layout content = 
      <span class="keyword">new</span> HorizontalLayout(inputPanel, displayPanel); 
     setContent(content); 
    } 
}</code></pre> 

Мой питон код для написания хитов в файл CSV является:

hits = soup.find_all("pre", "CodeRay highlight")# "programlisting") 
f = open('extractedsuorceTEST2.csv','ab') 
writer = csv.writer(f) 
writer.writerow(('page', hits[0].text.encode('UTF-8').replace('Â',' '))) 

К этому коду хиты [0] является:

'@CDIUI("cdievents")\[email protected]("valo")\npublic class CDIEventUI extends UI {\n @Inject\n InputPanel inputPanel;\n\n @Inject\n DisplayPanel displayPanel;\n\n @Override\n protected void init(VaadinRequest request) {\n  Layout content =\n   new HorizontalLayout(inputPanel, displayPanel);\n  setContent(content);\n }\n}' 

Но результат, записанный в файле csv:

@CDIUI(""cdievents"") 
@Theme(""valo"") 
public class CDIEventUI extends UI { 
    @Inject 
    InputPanel inputPanel; 

    @Inject 
    DisplayPanel displayPanel; 

    @Override 
    protected void init(VaadinRequest request) { 
     Layout content = 

Когда он должен быть:

@CDIUI("cdievents") 
@Theme("valo") 
public class CDIEventUI extends UI { 
    @Inject 
    InputPanel inputPanel; 

    @Inject 
    DisplayPanel displayPanel; 

    @Override 
    protected void init(VaadinRequest request) { 
     Layout content = 
      new HorizontalLayout(inputPanel, displayPanel); 
     setContent(content); 
    } 
} 

Может кто-нибудь предложить решение? Thanks

+0

Что делает 'hits [0] .text.encode ('UTF-8'). Replace ('Â', '')' содержать? – jsfan

+0

hits [0] .text.encode ('UTF-8'). Replace ('Â', ''): \t '@CDIUI ("cdievents") \ n @ Тема ("valo") \ nпубличный класс CDIEventUI расширяет UI {\ n @Inject \ n InputPanel inputPanel; \ n \ n @Inject \ n DisplayPanel displayPanel; \ n \ n @Override \ n защищенный void init (запрос VaadinRequest) {\ n Содержимое макета = \ n новый HorizontalLayout (inputPanel, displayPanel); \ n setContent (content); \ n} \ n} ' – user3707761

+0

Строка здесь завершена, но когда я пишу ее в CSV-файле, используя «writer.writerow», она усекается !!! – user3707761

ответ

0

Вы должны быть осторожны, чтобы не просто отказаться от файлов или объектов CSVWriter.

Попробуйте изменить вам код

hits = soup.find_all("pre", "CodeRay highlight")# "programlisting") 
with open('extractedsuorceTEST2.csv','ab') as f: 
    writer = csv.writer(f) 
    writer.writerow(('page', hits[0].text.encode('UTF-8').replace('Â',' '))) 

Если он по-прежнему не удается, проверьте field size limit и увеличить ее по мере необходимости.

+0

Спасибо за помощь. Но как насчет остальной части строки, которая усекается: new HorizontalLayout (inputPanel, displayPanel); setContent (content); } } – user3707761

+0

Извините, не понимал, что это был вопрос. Я заметил первое различие, но не усечение. Я отредактирую свой ответ. – jsfan

+0

Извините, CSVWriter не предоставляет функции контекстного менеджера. Вспомнил, что ошибочно и не проверял документы. Я исправил свой код. – jsfan

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