【问题标题】:Python writes part of a string into a csv rowPython 将字符串的一部分写入 csv 行
【发布时间】:2016-06-01 16:08:44
【问题描述】:

我正在尝试将标签的所有命中写入 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 文件的 python 代码是:

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('Â',' ')))

通过这段代码, hits[0] 是:

'@CDIUI("cdievents")\n@Theme("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);
    }
}

有人可以提出解决方案吗? 谢谢

【问题讨论】:

  • hits[0].text.encode('UTF-8').replace('Â',' ') 包含什么内容?
  • hits[0].text.encode('UTF-8').replace('Â',' ') : '@CDIUI("cdievents")\n@Theme("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 布局内容 =\ n new Horizo​​ntalLayout(inputPanel, displayPanel);\n setContent(content);\n }\n}'
  • 这里的字符串是完整的,但是当我使用“writer.writerow”将它写入CSV文件时它被截断了!!!

标签: python csv beautifulsoup


【解决方案1】:

您必须小心,不要仅仅放弃文件或 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 并根据需要增加它。

【讨论】:

  • 感谢您的帮助。但是被截断的字符串的其余部分呢: new Horizo​​ntalLayout(inputPanel, displayPanel);设置内容(内容); } }
  • 抱歉,没有意识到问题是关于这个的。我发现了第一个区别,但没有发现截断。我将编辑我的答案。
  • 抱歉,CSVWriter 不提供上下文管理器功能。记错了,没有检查文档。我已经修复了我的代码。
  • 它再次截断字符串。当我尝试在 txt 文件中写入 hits[0] 时,它写得很好。如果 csv 单元格中的数据受到限制,问题似乎与某种形式有关。
  • 我已经在不更改 field_size_limit 的情况下运行了您的代码,它对我来说效果很好。会不会是你的问题和字符编码有关?
猜你喜欢
  • 2020-10-27
  • 1970-01-01
  • 2019-03-01
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2011-08-26
相关资源
最近更新 更多