2017-09-18 59 views
0

我写了下面的代码作为我工作的一部分回车:Python 3.x都有 - 不计与LEN

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 

在这两种情况下,答案建议立即进行删除d是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. 

感谢。

回答

2

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

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

会给你6你的期望。

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

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

我已经有时间来处理和实现这个了。我特别喜欢.splitt()方法的优雅,尤其是当与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()) )))**'...以非缩进格式打印文件内容和结果。 –

1

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

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

,你就只匹配空格(file_content.count(" "))。

为了计算只有你想要么人物:

  • 读一行一行的文件,或
  • 使用正则表达式匹配的空白。

9的缩进:print过程中的逗号as outlined here

+0

谢谢。自从我开始使用Python已经有一个月了,我觉得我做得很好,但是如果你能够提供逐行阅读和正则表达式的例子,那现在就非常有用了。我发现这个网站的指导非常有用,但是我花了很长时间才把它编入我自己的代码中。 –

+0

...和重新:额外的空间,谢谢。如果我拆分输出行来删除逗号,问题就解决了。 –