在python中打开多个预定义的文本文件

时间:2011-05-28 06:36:41

标签: python mysql sql text

您好我只是想知道是否可以在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'])

这可能吗?如果是这样,我将如何让我的工作变得如此需要?

提前谢谢!

3 个答案:

答案 0 :(得分:0)

使用字符串插值或格式将类别放入文件规范中,并glob.glob()解析它。

答案 1 :(得分: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

答案 2 :(得分:0)

Python不是Perl,所以你应该编写更容易阅读的代码,即使它有点长。此外,新的with语法仅适用于较新的pythons。

您应该能够将此序列调整为您的代码

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")