Форум сайта python.su
0
Сохраняю список программ в формате csv.
wmic /output:wmicbuild.csv product get InstallDate,InstallLocation,Name,Vendor,Version /format:csv
import csv import MySQLdb filepath = r"wmicbuild.csv" mydb = MySQLdb.connect(host='localhost', user='login', passwd='password', db='test') cursor = mydb.cursor() with open(filepath, encoding='utf-16') as csvfile: csv_data = csv.reader(csvfile) strSQL = r"INSERT INTO csv(node,installdate,installlocation,name,vendor,version) VALUES(%s, %s, %s, %s, %s, %s)" for row in csv_data: #print(row) cursor.execute(strSQL, row) #close the connection to the database. mydb.commit() cursor.close() print ("Done")
query = query % args TypeError: not enough arguments for format string
Node,InstallDate,InstallLocation,Name,Vendor,Version User,20151221,,Python 3.2.7 Add to Path (32-bit),Python Software Foundation,3.2.7.0 User,20140624,C:\Program Files\OpenXML-ODF Translator\,ODF Add-in for Microsoft Office,OpenXML/ODF Translator Team,4.0.5309.0 User,20151221,,Python 3.2.7 Documentation (32-bit),Python Software Foundation,3.2.7.0
Офлайн
857
Для начала выполни команду напрямую:
cursor.execute(r"INSERT INTO csv(node,installdate,installlocation,name,vendor,version) VALUES(%s, %s, %s, %s, %s, %s)", ('1', '2', '3', '4', '5', '6'))
Отредактировано py.user.next (Дек. 29, 2015 15:18:41)
Офлайн
0
Работает!
Офлайн
0
А может это быть из-за пустого списка в самом начале файла?
Это вывод с помощью команды #print(row)
[] ['Node', 'InstallDate', 'InstallLocation', 'Name', 'Vendor', 'Version'] ['User', '20151221', '', 'Python 3.5.1 Add to Path (32-bit)', 'Python Software Foundation', '3.5.1150.0'] ['User', '20140624', 'C:\\Program Files\\OpenXML-ODF Translator\\', 'ODF Add-in for Microsoft Office', 'OpenXML/ODF Translator Team', '4.0.5309.0'] ['User', '20151221', '', 'Python 3.5.1 Documentation (32-bit)', 'Python Software Foundation', '3.5.1150.0']
Офлайн
857
Moi5esНу да. В корректном csv-файле не должно быть пустых строк.
А может это быть из-за пустого списка в самом начале файла?
Офлайн
0
Нашел ошибку! Во-первых, во всех файлах первой строчкой почему-то идет пустой список (его нужно игнорировать), во-вторых, в некоторых строках встречается название компании из двух и более слов через запятую (например Microsoft, Inc.,). “Увидев” запятую, скрипт воспринимает её как начало нового элемента. Тем самым количество элементов превышает число колонок в таблице БД. Также встретил еще одну ошибку: некоторые символы требуют кодировку “latin-1”.
Офлайн
857
Moi5esВот эта часть должна гарантировать правильность формата файла./format:csv
Moi5esПустая строка, наверное.
первой строчкой почему-то идет пустой список
Moi5esЭто всё тоже должна программа, выдающая csv-файл, делать (экранировать поле целиком).
во-вторых, в некоторых строках встречается название компании из двух и более слов через запятую
Moi5esКороче, с программой, которая делает файл, разберись. Либо замени её, либо сделай транслятор, который исправляет баги после неё, корректируя csv-файл.
Также встретил еще одну ошибку: некоторые символы требуют кодировку “latin-1”.
Отредактировано py.user.next (Дек. 30, 2015 09:02:42)
Офлайн
0
py.user.nextwmic - это штатная утилита Windows, поэтому с ней ничего не поделаешь. Уже делаю транслятор, который исправляет баги.
Короче, с программой, которая делает файл, разберись. Либо замени её, либо сделай транслятор, который исправляет баги после неё, корректируя csv-файл.
Офлайн