Python文本文件统计信息

时间:2018-05-24 03:58:49

标签: python

我正在尝试使用python来读取一个简短的文本文件,通过删除标点符号(:,。!?)来清理它,并查找行数和单词数。我创建的文件有3行,但在我删除标点后它显示有5行...我做错了什么?请帮忙。这是我的

[{0}]{1}{2}

3 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

具体来说,没有参数的方法split()会在任何空白而不是行边界上拆分字符串。 splitlines()会分开。

另外您的代码:

word_count += len(wordslist)

将单词列表的长度添加到wordslist的每个元素的单词计数中。这几乎绝对不是你想要的!

另请注意您的代码:

for char in ': , . ! ?': 
    data = data.replace(char,' ')

用空格替换提供的字符串(': , . ! ?':')中的每个字符。但是,因为您的字符串本身包含空格,所以您将data中的所有空格替换为空格4次。它不会改变结果,但会降低你的代码效率。

相反,您可以使用以下代码获得更正确的结果:

with open('book.txt','r') as file:
    data = file.read()
    for char in ':,.!?':
        data = data.replace(char,' ')
    word_count = len(data.split())      #count of words separated by whitespace
    line_count = len(data.splitlines()) #count of lines in data
print(word_count,line_count)

<强>附录

评论中还询问了如何获得字符数。假设字符计数应该计算所有不是空格的字符(制表符,换行符等)或特殊字符列表,那么可以使用正则表达式来完成:

import re
   #original code that stripped out punctuation here
   chars_only = re.sub(r"\s+", "", data, flags=re.UNICODE)
   char_count = len(chars_only)

re.sub执行正则表达式替换,替换与表达式r"\s+"匹配的字符(相当于&#34;所有空白字符&#34; )第二个参数 - 在这种情况下为空字符串。

但是,应该注意的是,此char_count将包含原始特殊标点符号列表中的标点字符(例如撇号)。

答案 1 :(得分:0)

你可以试试这个:

word_count = 0
line_count = 0
with open('sample1.txt','r') as file:
    data = file.readlines()
    for line in data:
        if '?,!:.' in line:
            data = line.strip('?,!@')
    for line in data:
        line_count += 1
        word_count += len(line.split(' '))
print(word_count, line_count)

说明:

此处strip()会删除我们不需要的字符。

使用readlines将读取所有行并以列表格式输入。

    for line in data:
    if '?,!:.' in line:
        data = line.strip('?,!@')

在这里,您将在每一行中进行迭代,并检查每行?:.,是否存在。如果它在那里你正在剥离它。

    for line in data:
        line_count += 1
        word_count += len(line.split(' '))

在这里,您将遍历每一行,并按line_count +=1计算行数word_count += len(line.split(' '))和word_count,并使用空格作为分隔符将行拆分为单词。

答案 2 :(得分:0)

.split()实际上并没有像你预期的那样使用直线。您需要.splitlines()

word_count = 0
line_count = 0
with open('books.txt','r') as file:
    data = file.read()
    for line in data:
        if '?,!:.' in line:
            data = line.strip('?,!@')
    #Here is the part you need
    wordslist = data.splitlines()
    for line in wordslist:
        line_count += 1
        word_count += len(line.split())
print(word_count, line_count)

或者你可以使用.split('\n')做同样的工作。

相关问题