2012-08-27 20 views
1
def fun(EACH) : 
    list1 = [] 
    EACH = str(EACH) 
    for all in a: # contains names of different checks  
     for files in b : 
       for line in open(str(files)) : 
       if EACH in line : 
          print files 
          break 

這裏a是一個包含許多文件的目錄。我將這些文件存儲在列表b中。 我想在EACH從函數調用中獲取值並在python中使用它們

例如提取與名稱的文件我想打開它的內容中的一個字符串「蘋果」的文件。這個蘋果詞是通過參數傳遞的。

的問題是,我不知道如何讀取值和if條件下使用相同的字符串。

+1

什麼'了'和'B',爲什麼'a'即使在那裏,你似乎沒有用它做任何事情? –

+0

請修正您的縮進以符合您的實際代碼。這根本不會運行。 – geoffspear

+0

一個是一個目錄,我複製只是我的代碼部分..一個是用於存儲的目錄路徑和b是用來存放在該目錄 – user1627331

回答

0

你真的要解析由線的每個文件中的行?你不能只是這樣做:

for b in a: 
    for fname in b: 
     with open(fname, "r") as f: 
      content = f.read() 
     if EACH in content: 
      print "There's a {0} in {1}".format(EACH, fname) 

(該with open(...) as ...是確保一旦你讀它你的文件被關閉......)

+0

問題是我不是能夠從參數讀取每個..即使我們的代碼必須從被傳遞給函數的參數讀取每個。如何使用該參數以及如何在條件 – user1627331

+0

中使用該參數OK,我們的功能是什麼?它有什麼論點?你爲什麼不讀它們?請更新您的問題。打開(fname,「r」)作爲f:顯示syntex錯誤時爲 –

+0

。 – user1627331

0

您可以使用下面的代碼:

def grepFileForLines(self, fileName = "", keepLinesWith = ""): 
    file = open(fileName, 'r') 
    matches = [] 

    for line in file: 
     if line.find(keepLinesWith) > -1: 
      matches.append(line) 
    return matches 
+1

這所有的文件將不會,除非它在工作列表一個類,'file'不應該被用作變量名;你打開它之後永遠不會關閉文件。您可以替換'line.find(keepLinesWith)'和'如果keepLineswith在行:'見[PEP8(http://www.python.org/dev/peps/pep-0008/) –

+0

你剛纔複製的自己的代碼,甚至沒有看問題和原始代碼?順便說一句,括號內應該沒有空格。因此,而不是'grepFileForLines(個體經營中,filename = 「」,keepLinesWith = 「」)'應該是'grepFileForLines(個體經營中,filename = 「」,keepLinesWith = 「」)'。請仔細研究pep8! – BrtH

相關問題