【问题标题】:Python - reading all files in a directory and then returning the max value based on some functionPython - 读取目录中的所有文件,然后根据某个函数返回最大值
【发布时间】:2015-06-20 20:10:45
【问题描述】:

我正在尝试创建一个函数,该函数打开并读取目录中的每个文件,然后根据某个函数返回具有最高值的文件。在这种情况下,我使用 Textblob 库中的一个名为情绪分析的函数来评估每个文本文件的乐观或消极程度。所以最终的目标是在目录中找到最乐观的.txt文件。

from textblob import TextBlob
import sys
import glob

def optimistic():
    path = 'Download/textfiles/*.txt'   
    files = glob.glob(path) 
    max_sent = 0
    for name in files: 
         with open(name) as f:
            sys.stdout.write(f.read())
            if TextBlob(f).sentiment > max_sent:
               max_sent = TextBlob(f).sentiment    
         return name     

我有点不确定我是否正确读取目录中的每个文件,以及我是否正确地将每个文件与所有其他文件进行比较以返回最大值。任何帮助将不胜感激。

【问题讨论】:

  • 感谢您的回复。例如,每当我尝试打印“文件”时,我都会得到 [ ]。我也不确定我是否应该返回姓名。我可以跳到代码审查,但也感谢任何帮助。
  • 如果files == [],它只是意味着没有文件匹配你的模式。确保您的路径正确。
  • @newrecruit21 - 不知道为什么 koukouviou 推荐 Code Review。您的代码不可能工作,因为它只扫描第一个文件 (return name)
  • 我是这么认为的。 Julien Spronck 在下面写的怎么样?

标签: python for-loop text directory


【解决方案1】:

除了return 值外,它看起来不错。在您的代码中,它将始终返回 files 中的名字,而不是遍历它们。也许,你想试试这个。我只是对您的代码进行了最小的更改,每次找到新的最大值然后返回该值时,我都会在其中分配一个 max_name 变量。

from textblob import TextBlob
import sys
import glob

def optimistic():
    path = 'Download/textfiles/*.txt'   
    files = glob.glob(path) 
    max_sent = 0
    max_name = ''
    for name in files: 
         with open(name, 'r') as f:
            text = f.read()
            sentiment = TextBlob(text).sentiment
            if sentiment > max_sent:
                max_sent = sentiment
                max_name = name   
    return max_name

请注意,我也以只读模式打开文件,因为您不写入它们:open(name, 'r')。另外,由于 TextBlob 需要一个字符串作为输入,所以我首先将您的文件转换为字符串。

【讨论】:

  • 这太好了,谢谢。但是,现在唯一的问题是它说 f 不是字符串。 Textblob 仅适用于字符串。 (顺便说一句,我修复了路径)。
  • 我不知道 TextBlob,但如果它需要字符串,我会进行编辑。
  • @newrecruit21...我刚刚进行了编辑...希望它对您有用。
  • 那太棒了。
  • @newrecruit21不客气 :-) 我只是做了一个小改动来获取文件内容text = f.read() 而不是text = '\n'.join(f.readlines())。应该更简单更好。
猜你喜欢
  • 2014-07-19
  • 2014-11-10
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多