空间计数错了吗?

时间:2016-05-10 23:22:37

标签: python python-2.7

我正在阅读标识文本中特定特征的文本文件。一切都很好,直到它到达显示有15个空格而不是6个空格的空间部分。

文本文件是

Hello
Do school units regularly
Attend seminars
Study 4 tests
Bye 

,脚本是

def main():
    lower_case = 0
    upper_case = 0
    numbers = 0
    whitespace = 0
    with open("text.txt", "r") as in_file:
        for line in in_file:
            lower_case += sum(1 for x in line if x.islower())
            upper_case += sum(1 for x in line if x.isupper())
            numbers += sum(1 for x in line if x.isdigit())
            whitespace += sum(1 for x in line if x.isspace())

    print 'Lower case Letters: %s' % lower_case
    print 'Upper case Letters: %s' % upper_case
    print 'Numbers: %s' % numbers
    print 'Spaces: %s' % whitespace


main()

是否有任何应该更改的内容,以便空格数量会变为6?

2 个答案:

答案 0 :(得分:0)

发生这种情况的原因是因为换行也被认为是空格。现在,您打开的文件可能是在Windows上创建的,而在Windows上,换行符是两个字符(实际换行符和插入符号返回)。由于你有五行,你得到额外的10个空格,总共16个(一个在某处丢失,我只能猜测其中一行在结尾处有不同的换行符,没有插入符号)。

要修复它,只需在计算空格时删除该行。

whitespace += sum(1 for x in line.strip() if x.isspace())

但是,这也会删除任何不是换行符的尾随和前导空格。要从最后删除换行符,您可以执行

whitespace += sum(1 for x in line.rstrip("\r\n") if x.isspace())

答案 1 :(得分:0)

另一种可能性是不使用isspace(),而是检查您想要的字符,例如

whitespace += line.count(' ') + line.count('\t')