2015-04-07 52 views
0

我有一個函數可以查找平均字符串長度。現在我試圖編寫一個函數來遍歷並觸摸目錄中的每個txt文件,並返回文件的最高均值。我現在所擁有的東西似乎沒有正確穿越。 Pleeease的幫助。謝謝。Python - 文件夾中所有文件的平均長度函數

from __future__ import print_function 
import os 

def mean_length(file path): 
    length = 0.0 
    line_num = 0 
    with open(filepath) as f: 
     for line in f: 
      if line.strip(): 
       length += len(line.strip()) 
       line_num += 1 
    return length/line_num 

def highest_mean(): 
    max_mean = 0 
    max_name = "" 
    filepath = open("Desktop/Textfiles/moby.txt") 
    for root, dirs, files in os.walk("Desktop/Textfiles"): 
     for filename in files: 
      if filename.endswith('.txt'): 
       filepath = os.path.join(root, filename) 
       if mean_length(filepath) > max_mean: 
        max_name = filename 
        max_mean = mean_length(filepath) 
      return max_name 
+0

你似乎有在files'迴環文件的額外' ,if'file.endswith('。txt')'後面的那個似乎是虛假的。 – AChampion

+0

爲什麼你在函數highest_mean中的if後重新遍歷所有文件? – Amit

+0

啊,我的錯。但是,即使沒有額外的for循環,該函數仍然不起作用。還有什麼你看到錯誤的嗎? –

回答

0

我認爲你需要經過的所有文件,以獲得一個最高的平均值,可能與另外兩個變量:

def mean_length(filepath): 
    length = 0.0 
    line_num = 0 
    with open(filepath) as f: 
     for line in f: 
      if line.strip(): 
       length += len(line.strip()) 
       line_num += 1 
    return length/line_num 

def highest_mean(): 
    max_mean = 0 
    max_name = "" 
    for root, dirs, files in os.walk("Desktop/Textfiles"): 
     for filename in files: 
      if filename.endswith('.txt'): 
       filepath = os.path.join(root, filename) 
       m_length = mean_length(filepath) 
       if m_length > max_mean: 
        max_name = filename 
        max_mean = m_length 
    return max_name 
+0

嗯,這看起來更好。謝謝。但它只是返回''。我認爲問題在於第二個函數只能找到文本文件名的意思,而不是裏面的內容。該聲明已經被推薦爲開放(字符串,'r')f:。 –

+0

您對mean_length的輸入不應該是一個名稱序列,而是一個文件名/文件路徑 –

+0

對不起,請耐心等待。我編輯了我的初始文章(我將改回),以顯示您推薦的更改。基本上我把--filepath = open(「Desktop/Textfiles/moby.txt」)添加到highest_mean函數中。仍然沒有工作。 –

相關問題