Python错误“序号不在范围内”,带重音符号

2024-04-19 06:55:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我从网上抓取一张表格并保存为CSV文件。文本中有带法语重音的字符,导致保存时出现unicode错误:

 UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-6: ordinal not in range(128)

我想找到一个优雅的解决方案来保存重音字符,我可以适用于任何情况。我有时会使用以下方法:

^{pr2}$

但这次不起作用,原因不得而知。我还试图替换单元格中的<sup>标记,因此我首先使用str()来转换它。在

以下是我的代码的相关部分:

 data = [
      str(td[0]).split('<sup')[0].split('>')[1].split('<')[0],
      td[1].getText()
 ]
 output.append(data)

 csv_file = csv.writer(open('savedFile.csv', 'w'), delimiter=',')

 for line in output:
      csv_file.writerow(line)

Tags: 文件csvin文本outputdataline字符
2条回答

如果td[0]u"a<sup>b</sup>c"

td[0].split('<sup')u"a"。在

td[0].partition('>')[2].split('<')[0]u"b"。在

td[0][td[0].rindex('>') + 1:]u"c"。在

如果这种字符串索引和匹配过于简单,您可以考虑创建一个正则表达式并将其与html标记中的文本进行匹配:

import re
r = re.compile("[^<]*<sup>([^<]*)</sup>")
m = r.match("some<sup>text</sup>")
print(m.groups()[0])

csv.reader()和{}需要以二进制模式打开的文件。您还应该在文件末尾关闭该文件。因此,您应该这样写:

f = open('output.csv', 'wb')
writer = csv.writer(f, delimiter=',')

for row in output:
    writer.writerow(row)

f.close()

或者您可以在使用较新版本的Python时使用with构造:

^{pr2}$

。。。文件将自动关闭。在

不管怎样csv.writer()需要由字节序列(而不是Unicode字符串)组成的行。如果有Unicode字符串,请使用.encode('utf-8')进行转换:

    for row in output:
        encoded_row = [s.encode('utf-8') for s in row]
        writer.writerow(encoded_row)

相关问题 更多 >