【问题标题】:Python 3.x - don't count carriage returns with lenPython 3.x - 不要用 len 计算回车
【发布时间】:2017-09-18 13:10:00
【问题描述】:

作为练习的一部分,我正在编写以下代码:

input_file = open('/home/me/01vshort.txt', 'r')
file_content = input_file.read()
input_file.close()
file_length_question = input("Count all characters (y/n)? ")
if file_length_question in ('y', 'Y', 'yes', 'Yes', 'YES'):
    print("\n")
    print(file_content, ("\n"), len(file_content) - file_content.count(" "))

它在输出中计算回车,因此对于以下文件(01vshort.txt),我得到以下终端输出:

Count all characters (y/n)? y

0
0 0
1 1 1

 9

...或...

Count all characters (y/n)? y

0
00
111

 9

在这两种情况下,答案都应该是 6,因为有 6 个字符,但结果是 9。

我已确保代码省略了空格,并通过故意添加空格并在有和没有行的情况下运行代码,用我的输入文件对此进行了测试:

 - file_content.count(" ")

任何人都可以在这里帮助解释为什么结果是 9 而不是 6?

也许根本就不是回车?

我也很好奇为什么 9 的结果缩进了 1 个空格?输入文件只包含以下内容(文件末尾有一个空行,示例中显示了行号):

1. 0
2. 0 0
3. 1 1 1
4. 

...或...

1. 0
2. 00
3. 111
4. 

谢谢。

【问题讨论】:

    标签: python-3.x string-length


    【解决方案1】:

    如果您想忽略所有空白字符,包括制表符和换行符以及其他控制字符:

    print(sum(not c.isspace() for c in file_content))
    

    会给你你期望的6

    或者,您可以利用不带参数的.split() 方法在任何空白字符上拆分字符串这一事实。因此,将其拆分为非空格块,然后将它们全部重新组合在一起,无需空格字符:

    print(len(''.join(file_content.split())))
    

    【讨论】:

    • 我现在有时间处理和实施这个。我特别喜欢 .split() 方法的优雅,尤其是与 sys.stdout 方法结合使用时,它可以跳过逗号来解释对这种字符(逗号)的“打印”敏感性。所以,我可以使用: >> **sys.stdout.write("%s" % (len("".join(file_content.split()))))**... 只打印结果,或以下: >> **sys.stdout.write("%s%s%s" % (file_content, ("\n"), len("".join(file_content.split()))))** ... 以非缩进格式打印文件内容和结果。
    【解决方案2】:

    您得到 9,因为文件的内容可以解释为:

    file_content = "0\n0 0\n1 1 1\n"
    

    而您只匹配空格 (file_content.count(" "))。

    为了只计算你想要的字符:

    • 逐行读取文件,或
    • 使用正则表达式匹配空格。

    对于9的缩进:print处理逗号as outlined here

    【讨论】:

    • 谢谢你。自从我开始使用 Python 已经一个月了,我觉得我做得很好,但是如果你能提供逐行阅读的示例以及正则表达式,那现在将非常有用。我发现这个网站上的指导非常有用,但是我需要很长时间才能将其编入我自己的代码中。
    • ...并回复:额外的空间,谢谢。如果我拆分输出行去掉逗号,问题就解决了。
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多