【问题标题】:Correctly splitting strings after reading from file in Python从 Python 中读取文件后正确拆分字符串
【发布时间】:2015-10-10 20:35:19
【问题描述】:

我试图在读取文件后平均每个单词的长度。但是,文件中的文本没有按照正常的句子结构进行格式化。有时单词和句子中间的换行符之间会有额外的空格。

当前代码

def average(filename):
    with open(filename, "r") as f:
        for line in f:
            words = line.split()
            average = sum(len(words) for words in words)/len(words)
            return average

>>>4.3076923076923075

Expected
>>>4.352941176470588

文件

Here are some words   there is no punctuation but there are words what
is the average length

【问题讨论】:

  • 请提供完整代码。 return 只能在函数内部使用。
  • @marmeladze 刚刚编辑
  • 你说你试图计算每个字符串的平均长度,你的意思是单词还是每行的单词数?此外,您可能希望在代码中编辑名称 words 的双重含义
  • 文件内每个单词的平均长度

标签: python file split


【解决方案1】:

当你以f打开文件时,然后运行

for x in f:

x 将是文件中的每一行 line,以换行符结束。您得到的答案对于第一行文本是完全正确的。如果您希望第二行包含在第一行中,则需要将文本文件作为一个整体进行处理,而不是逐行处理。

假设您想获得文件中所有单词的平均值,以下应该会更好一些:

def average(filename):
    with open(filename, "r") as f:
        lines = [line for line in f]
        words = " ".join(lines).split()
        average = sum(len(word) for word in words)/len(words)
    return average

【讨论】:

  • 您愿意提供一个例子吗?我对来自 Java 的 Python 很陌生
  • @23k 文件中有多个条目,还是这个?如果这是唯一的条目,则只需" ".join() 每行
  • 这是唯一的条目。
  • 太棒了!感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多