как использовать python sys.argv

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