在python中写入csv - 分隔符

时间:2017-05-15 19:21:40

标签: python csv text

我正在尝试在csv文件中写入我的代码的结果,但不知何故它写得不正确。

我的代码是:

const

所以我想得到这样的结果:     certainty1 | SENTENCE1 | ccue1     certainty2 | SENTENCE2 | ccue2     ... 所以分隔符是|。

但我当前的代码将所有内容写入1行,这些分隔符无处不在:

import xml.etree.ElementTree as ET
import csv

with open('myfile.xml', 'rt') as f:
tree = ET.parse(f)

for sentence in tree.iter('sentence'):
    certainty = sentence.attrib.get('certainty')
    ccue = sentence.find('ccue')
    with open('new_file.csv', 'w', newline='') as csvfile:
       writer = csv.writer(csvfile, delimiter='|',
                            quotechar='^', quoting=csv.QUOTE_MINIMAL)
       if certainty and (ccue is not None):
           writer.writerow('  %s | %s | %s' % (certainty, ''.join(sentence.itertext()), ccue.text))
       else:
           writer.writerow('  %s | | %s' % (certainty,sentence.text))

为什么会发生这种情况,我该如何解决?谢谢!

2 个答案:

答案 0 :(得分:3)

当你这样做时:

if certainty and (ccue is not None):
  writer.writerow('  %s | %s | %s' % (certainty, ''.join(sentence.itertext()), ccue.text))
else:
  writer.writerow('  %s | | %s' % (certainty,sentence.text))

您已将str传递给writerow,后者需要可迭代,因此它会对您的字符串进行迭代,每个字符会获得1个单元格。< / p>

请注意,您不必重新指定分隔符,它已在csv.writer中设置。您只需将元素作为列表元组传递,例如:

if certainty and ccue: # let's simplify your test (ccue is an object or None)
    writer.writerow((certainty,''.join(sentence.itertext()),ccue.text))
else:
    writer.writerow((certainty,'',sentence.text))
编辑:我遗漏了你的另一个问题,一线问题。对于那个,下面的上下文处理程序+ csv writer创建:

with open('new_file.csv', 'w', newline='') as csvfile:
   writer = csv.writer(csvfile, delimiter='|',
                        quotechar='^', quoting=csv.QUOTE_MINIMAL)

应该放在外面 for循环中,否则你只会看到最后一行(保持原样并且使用追加模式也是可能的,但更少高性能)

答案 1 :(得分:0)

writer.writerow需要list而不是字符串。