Python 3.x 计算文本中不包括缩进的空格数

Python 3.x 计算文本中不包括缩进的空格数,python-3.x,Python 3.x,我试图计算日志文件内容中的空格数 我参考了多个网站,可能提供的解决方案如下: 数据文件=输入(“输入文件名:”) k=0 以open(数据文件“r”)作为openedfile: 对于openedfile中的行: words=line.split() 对于我来说,用文字来说: 对于i中的字母: 如果(字母.isspace): k=k+1 印刷品(k) 但是这个代码会打印文件中的字母数 我尝试了以下代码: fname=input(“输入文件名:”) k=0 将open(fname,'r')作为f

我试图计算日志文件内容中的空格数

我参考了多个网站,可能提供的解决方案如下:


数据文件=输入(“输入文件名:”)
k=0
以open(数据文件“r”)作为openedfile:
对于openedfile中的行:
words=line.split()
对于我来说,用文字来说:
对于i中的字母:
如果(字母.isspace):
k=k+1
印刷品(k)
但是这个代码会打印文件中的字母数

我尝试了以下代码:

fname=input(“输入文件名:”)
k=0
将open(fname,'r')作为f:
对于f中的行:
对于直列:
如果(a.isspace())==True:
k=k+1
打印(“出现空格:”)
印刷品(k)
这是将缩进(第一行的末端和第一行的星形)视为一个空格


我希望代码只打印文件内容中的空格数(不包括行与行之间的缩进)

您可以使用以下方法去除前导空格和尾随空格:


您可以计算应用于空格的
.split()
方法产生的项目数(减去一,因为将比空格多出一个项目)

n_space=len(open('text.txt','r').read().split('')-1
使用下面的
text.txt
文件,代码成功地计数了7个空格

Lorem ipsum dolor sit amet, consectetur adipiscing elit
编辑

如果要将多个分隔符视为空格(如双空格或制表符),只需在拆分和计数之前将其替换为简单空格即可

text=open('text.txt','r').read().replace('','').replace('\t','')
n_spaces=len(text.split(“”))-1
使用正则表达式-->
re.findall(r“\s”,line.strip())

Ex:

import re

with open(filename) as infile:
    print(sum(len(re.findall(r"\s", line.strip())) for line in infile))
  • \s
    -->用于文本中的空格

您的文件有多大?从2行开始调试代码,然后尝试实际文件大小。在我看来,你会自己解决的。只需进行有限且易于调试的测试。如果您对空格感兴趣,您可以做一些类似于
k+=line.strip().count(“”)
@Heike的操作,例如,这不会计算制表符数。@Selcuk这就是我在评论中提到“Just spaces”的原因。@Heike同意,但OP当前使用的是
.isspace()
它检测所有空白字符。你建议的方法不是等效的。这是完美的。你知道在什么情况下这可能会失败吗?考虑到冗长的段落、双空格、制表符、缩进或换行符?我还想更好地了解使用-1I处理双空格(或任何其他分隔符)情况的逻辑。如果缩进是用制表符做的,而不想把它作为空间来计算,不要替换它们,它们将不被计数(如中断)。对于负一的逻辑:考虑字符串<代码>“Hello,World!”< /C>。拆分将导致一个长度为2的列表
[“Hello”,“world!”]
(比空格多出一个项目)。减1输出正确的空格数。
Lorem ipsum dolor sit amet, consectetur adipiscing elit
import re

with open(filename) as infile:
    print(sum(len(re.findall(r"\s", line.strip())) for line in infile))