Python umlaut字符问题-需要mbcs,是否有更好的方法来处理所有字符

汤姆·斯蒂克尔

使用Python脚本打开包含变音符号的文件时遇到麻烦。自然,我以为我可以用Unicode utf8修正来解决这个问题,但事实并非如此...

我最终使用了mbcs(默认值为cp1252)

然后我写了我想写的更清洁的声明,

def len(fname):
i = -1
try:
    with open(fname, encoding='mbcs') as f:
        for i, l in enumerate(f):
            pass
except UnicodeDecodeError:
    try:
        i = -1
        with open(fname, encoding='utf8') as f:
            for i, l in enumerate(f):
                pass
    except UnicodeDecodeError:
        i = -1
        with open(fname) as f:
            for i, l in enumerate(f):
                pass
return i + 2 # 2 because it starts at -1 not 0
阿巴内特

如注释中所述,几乎可以肯定这是所有错误的答案……但是,如果您确实确实需要执行以下操作,则可以通过以下方法简化操作:

避免重复自己的一般解决方案是使用循环。您有3次相同的代码,唯一的不同是encoding,因此请循环使用3种编码。(在您的情况下,第三个循环根本没有传递一个encoding,因此您必须知道该参数的默认值,但是docshelp会告诉您。)唯一的麻烦是您显然不想处理第三种情况下的例外;最简单的方法是在所有异常均失败的情况下提出最后一个异常。

当我们这样做时:无需预先声明i您的操作方式;for循环只是要在任何你放在那里0和擦除启动。这也意味着+2结尾处是错误的。但是,首先有一种更简单的方法来获取可迭代对象的长度:只需将其馈送到使用生成器表达式的对象中即可。ilen用C编写的自定义函数将是理想的,但是人们已经测试了各种不同的Python实现,并且sum(1 for _ in iterable)几乎与完美的解决方案一样快,而且非常简单,因此这是最常见的习惯用法。如果您不希望这样做,请将其作为函数lien分解出来并调用它,并为其提供漂亮的文档字符串和/或注释。或者只是pip install more-itertools,然后您可以致电more_itertools.ilen(f)

无论如何,将它们放在一起:

def len(fname):
    for encoding in 'mbcs', 'utf8', None:
        try:
            with open(fname, encoding=encoding) as f:
                return sum(1 for line in f)
        except UnicodeDecodeError as e:
            pass
    raise e

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有什么更好的方法来处理此类问题?

来自分类Dev

python post server是否有更好的方法来处理不同的文件类型?

来自分类Dev

由于德国Umlaut,Python中的字符串不相等

来自分类Dev

有关字符编码的Python问题

来自分类Dev

R markdown中的德语Umlaut字符

来自分类Dev

德语Umlaut / userInfo NSDictionary中的特殊字符

来自分类Dev

我需要替换python中string的所有字符

来自分类Dev

python字符计数问题

来自分类Dev

在Python中找到字符串中的所有子字符串,如何使它更好?

来自分类Dev

有没有更好的方法来检查整个字符串是否匹配?

来自分类Dev

除了使用tranwrd函数之外,是否有更好的方法来替换sas文本字符串

来自分类Dev

有没有更好的方法来检查多个变量是否在Python中是单个类型?

来自分类Dev

返回字符串列表的python函数有问题吗?

来自分类Dev

处理字符串中的所有url并返回在python中修改的新字符串

来自分类Dev

我需要一种方法来查找字符串的所有实例,然后从该字符串的末尾获取所有内容

来自分类Dev

字符串附加问题-Python

来自分类Dev

CodingBat练习问题-Python字符串

来自分类Dev

Python波兰语字符编码问题

来自分类Dev

python字符串编码问题

来自分类Dev

CodingBat练习问题-Python字符串

来自分类Dev

字符串附加问题-Python

来自分类Dev

Python字符串格式显示问题

来自分类Dev

Python是否有字符串“包含”?子串方法?

来自分类Dev

是否有一种简单的方法来获取不是以连字符开头的所有参数的数组?

来自分类Dev

有没有更好的方法来计算字符串中char的出现?

来自分类Dev

有没有更好的方法来确定多个字符范围?

来自分类Dev

尽管字符集正确,德国Umlaut仍然显示错误

来自分类Dev

得到?而bcp用umlaut字符(¬)从sybase中取出数据

来自分类Dev

验证字符串中是否存在所有字符序列(Python 2+)

Related 相关文章

  1. 1

    有什么更好的方法来处理此类问题?

  2. 2

    python post server是否有更好的方法来处理不同的文件类型?

  3. 3

    由于德国Umlaut,Python中的字符串不相等

  4. 4

    有关字符编码的Python问题

  5. 5

    R markdown中的德语Umlaut字符

  6. 6

    德语Umlaut / userInfo NSDictionary中的特殊字符

  7. 7

    我需要替换python中string的所有字符

  8. 8

    python字符计数问题

  9. 9

    在Python中找到字符串中的所有子字符串,如何使它更好?

  10. 10

    有没有更好的方法来检查整个字符串是否匹配?

  11. 11

    除了使用tranwrd函数之外,是否有更好的方法来替换sas文本字符串

  12. 12

    有没有更好的方法来检查多个变量是否在Python中是单个类型?

  13. 13

    返回字符串列表的python函数有问题吗?

  14. 14

    处理字符串中的所有url并返回在python中修改的新字符串

  15. 15

    我需要一种方法来查找字符串的所有实例,然后从该字符串的末尾获取所有内容

  16. 16

    字符串附加问题-Python

  17. 17

    CodingBat练习问题-Python字符串

  18. 18

    Python波兰语字符编码问题

  19. 19

    python字符串编码问题

  20. 20

    CodingBat练习问题-Python字符串

  21. 21

    字符串附加问题-Python

  22. 22

    Python字符串格式显示问题

  23. 23

    Python是否有字符串“包含”?子串方法?

  24. 24

    是否有一种简单的方法来获取不是以连字符开头的所有参数的数组?

  25. 25

    有没有更好的方法来计算字符串中char的出现?

  26. 26

    有没有更好的方法来确定多个字符范围?

  27. 27

    尽管字符集正确,德国Umlaut仍然显示错误

  28. 28

    得到?而bcp用umlaut字符(¬)从sybase中取出数据

  29. 29

    验证字符串中是否存在所有字符序列(Python 2+)

热门标签

归档