2011-05-28 69 views
0

您好我只是想知道是否有可能在Python中打開多個預定義的文本文件。在python中打開多個預定義的文本文件

我在下面有一些代碼(它還沒有工作),第一個函數有一個類別參數,它們都是測試用例中預定義的文本文件名。我需要嘗試打開下面定義的所有文本文件,將它們輸入到sql數據庫中。

data_entry(categories): 
    with open ((categories)"*.txt"), "r") as categories: 
     lines = categories.readlines() 

    for line in lines: 
     data = line.split() 
     number = data[0] 
     value = data[1] 

    cursor.execute("""INSERT INTO popularity (PersonNumber, category, value) 
        VALUES(%s, %s, %s)""", (number, category, value))  

if __name__ == '__main__': 
     data_entry(['movies', 'sports', 'actors', 'tv', 'games', \ 
     'activities', 'musicians', 'books']) 

這可能嗎?如果是這樣,我將如何着手實現我需要的工作?

預先感謝您!

回答

0

使用字符串插值或格式化將類別放入filespec中,然後使用glob.glob()來解決它。

+0

我在蟒蛇有點不好意思nooby,是有更多一點的解釋任何機會? :\ – Dylan 2011-05-28 06:46:11

+0

[字符串格式化操作](http://docs.python.org/library/stdtypes.html#string-formatting-operations),['glob'](http://docs.python.org/library/ glob.html)。 – 2011-05-28 06:47:56

0

爲什麼你將行讀入列表中,然後在事實之後進行檢查?

import glob, itertools 

def data_entry(categories): 
    globs = [glob.iglob(category + "*.txt") for category in categories] 
    for filename in itertools.chain(*globs): 
     with open(filename) as f: 
      for line in f: 
       number, value = line.split() 

       cursor.execute(...) 

itertools.chain; glob; list comprehensions

0

Python不是Perl,因此您應該編寫易於閱讀的代碼,即使時間稍長一點。此外,新的語法只適用於較新的python。

你應該能夠這個序列適應你的代碼

import fnmatch 
import os 

for file in os.listdir('.'): 
    if fnmatch.fnmatch(file, '*.txt'): 
     print(file) 

或者只是:

data_entry(categories): 
    foreach category in categories: 
     f = open ("%s.txt" % (category)), "r")