Как создать отдельный csv-файл для каждого sql-запроса в python?

#python

#python

Вопрос:

У меня есть 3 sql-запроса в разных файлах. Я попытался выполнить все sql-запросы один за другим. но выходные данные каждого sql-запроса сохраняются в одном csv-файле. итак, я хочу сохранить каждый результат запроса в отдельном CSV-файле.

 path1 = "D:/Users/SPate233/Downloads/NS dashboard/sql_query/*.txt"
files = glob.glob(path1)
for name in files:
    try:
        with open(name) as f:
            sql_query = f.read()
            cur.execute(sql_query)
            result = cur.fetchall()

            with open("output.csv", 'w') as fp:
                a = csv.writer(fp, delimiter=',')
                a.writerow([i[0] for i in cur.description])
                a.writerows(result)

    except:
        print("error")
  

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

1. CSV-файлы записываются в один и тот же файл, потому что вы открываете их с помощью одного и того же open("output.csv", 'w') оператора.

Ответ №1:

Это происходит потому, что вы каждый раз перезаписываете один и тот же csv-файл.

 path1 = "D:/Users/SPate233/Downloads/NS dashboard/sql_query/*.txt"
files = glob.glob(path1)
i = 1
for name in files:
    try:
        with open(name) as f:
            sql_query = f.read()
            cur.execute(sql_query)
            result = cur.fetchall()

            with open("output_%s.csv" % i, 'w') as fp:
                a = csv.writer(fp, delimiter=',')
                a.writerow([i[0] for i in cur.description])
                a.writerows(result)
            i =1

    except:
        print("error")
  

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

1. спасибо за помощь. мне нужно еще одно требование. Если я хочу сгенерировать csv-файл с именем запроса, например, — if «survey_cust.txt «выполняется запрос, после чего файл csv будет генерировать имя типа «survey_cust.csv». как это сделать, не могли бы вы, пожалуйста, помочь мне реализовать эту логику?

2. @amisha csv_name = name.split('/')[-1].split('.')[0] with open("output_%s.csv" % csv_name, 'w') as fp:

Ответ №2:

Вы продолжаете записывать в один и тот же CSV-файл. Почему бы вам не попробовать что-то вроде этого:

 
path1 = "D:/Users/SPate233/Downloads/NS dashboard/sql_query/*.txt"
files = glob.glob(path1)
file_list = ["file1.csv", "file2.csv"]

for iterator, name in enumerate(files):
    try:
        with open(name) as f:
            sql_query = f.read()
            cur.execute(sql_query)
            result = cur.fetchall()

            with open(file_list[iterator], 'w') as fp:
                a = csv.writer(fp, delimiter=',')
                a.writerow([i[0] for i in cur.description])
                a.writerows(result)

    except:
        print("error")