#python #csv #import #argv
Вопрос:
как использовать python sys.argv
Я хочу оставить результат в качестве имени файла, которое я хочу.
import pymssql
import csv
import sys
dbname = sys.argv[1]
conn = pymssql.connect(host='rds.amazonaws.com', user='asdf', password='asdf', database= dbname, charset='utf8')
curs = conn.cursor()
sql = "select * from usertable with(nolock);"
f = open('dbname_result.csv', 'w')
wr = csv.writer(f)
curs.execute(sql)
rows = curs.fetchall()
for row in rows:
wr.writerow(row)
conn.commit()
conn.close()
f.close()
Результат
python test.py userdb01
-> dbname_result.csv
Но результат, на который я надеюсь…
python test.py userdb01
-> userdb01_result.csv
Комментарии:
1. Ваше использование
sys.argv
было прекрасным. Вам нужно использовать f-строку (форматированную строку) для имени файла:f = open(f'{dbname}_result.csv', 'w')
, если у вас Python 3.6 или более поздней версии.2. Я все еще использую Python 2.7.16. но я попробую. @sj95126
3. Хорошо, тогда вы могли бы просто:
f = open(dbname '_result.csv', 'w')
4. Вы нашли решение? Работал ли для вас тот, который я привел ниже? Если это так, пожалуйста, отметьте ответ или создайте его и отметьте его для тех, кто найдет ваш вопрос в будущем.
Ответ №1:
Как минимально описано в комментарии @sj95126, вы не оцениваете значение dbname
как переменную. Вы передаете его как постоянное строковое значение.
Если вы используете Python 3 , вы можете использовать f-строку, как описано выше…
f = open(f'{dbname}_result.csv', 'w')
Если вы используете Python 2 или 3, вы можете использовать несколько методов, но я предпочитаю str.format
, чтобы мне требовалась совместимость между версиями.
f = open('{}_result.csv'.format(dbname), 'w')