Открыть несколько предопределенных текстовых файлов в python

#python #mysql #sql #text

#python #mysql #sql #текст

Вопрос:

Здравствуйте, мне просто интересно, возможно ли открыть несколько предопределенных текстовых файлов в python.

У меня есть некоторый приведенный ниже код (он пока не работает), и первая функция имеет параметр categories, который представляет собой имена всех текстовых файлов, которые предварительно определены ниже в тестовом примере. Мне нужно попробовать открыть все текстовые файлы, как определено ниже, чтобы ввести их в базу данных 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'])
  

Возможно ли это? Если да, то как бы мне заставить это работать так, как мне нужно?

Заранее благодарю вас!

Ответ №1:

Используйте интерполяцию строк или форматирование, чтобы поместить категорию в спецификацию файла и glob.glob() разрешить ее.

Комментарии:

1. Я немного новичок в python, извините, есть ли возможность получить немного больше объяснений? :

2.Операции форматирования строк, glob .

Ответ №2:

Почему вы зачитываете строки в список, а затем просматриваете его постфактум?

 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 ; список понимания

Ответ №3:

Python — это не Perl, поэтому вы должны писать код, который легче читать, даже если он немного длиннее. Также синтаксис the new 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")