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