Пропустите первую строку и удалите определенный символ перед импортом CSV в БД

0

Я новичок в Python, и моя задача - импортировать CSV в базу данных MySQL. У меня есть этот пример значений внутри моего CSV файла:

SHA1,VSDT,TRX
005c41fc0f8580f51644493fcbaa0d2d468312c3,(WIN32 (EXE 7-2)),Ransom.Win32.TRX.XXPE50FFF027,
006ea7ce2768fa208ec7dfbf948bffda9da09e4e,WIN32 EXE 2-2,TROJ.Win32.TRX.XXPE50FFF027,

Моя проблема здесь, как я могу удалить "( " и ")" только в начальной и конечной точке строки во втором столбце перед импортом в базу данных?

У меня есть этот код для импорта CSV

import csv
import mysql.connector
file = open(fullPath, 'rb')  
csv_data = csv.reader(file)

mycursor = mydb.cursor()
cursor = mydb.cursor()
for row in csv_data:
cursor.execute('INSERT INTO jeremy_table_test(sha1,vsdt,trendx)'
               'VALUES(%s, %s, %s)',[(row[0]),(row[1]),(row[2]))
mydb.commit()
cursor.close()
print("Done")
  • 0
    Вы получаете ошибку ввода-вывода, потому что вы выполняете транзакцию на f1 после того, как закрыли ее, т. Е. Она находится за пределами отступа with open() as f1 раздел with open() as f1 .
Теги:
csv

2 ответа

1
Лучший ответ

MySQL LOAD DATA tool, вероятно, может делать то, что вы хотите здесь. Вот как может выглядеть вызов LOAD DATA:

LOAD DATA INFILE 'path/to/rb'
INTO TABLE jeremy_table_test
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n' -- or '\n'
IGNORE 1 LINES
(sha1, @var1, trendx)
SET vsdt = TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM @var1));

Чтобы сделать этот вызов из вашего кода Python, вы можете попробовать что-то вроде этого:

query = "LOAD DATA INFILE 'path/to/rb' INTO TABLE jeremy_table_test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (sha1, @var1, trendx) SET vsdt = TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM @var1))"
cursor.execute(query)
connection.commit()
  • 0
    Вы можете отредактировать его в полном коде? Я не могу понять форматирование загрузки данных infile, только новичок здесь
  • 0
    Я не понимаю вашу просьбу. Мой ответ настолько ясен, насколько это возможно. Возможно, вы захотите сначала запустить LOAD DATA из командной строки, чтобы убедиться, что там нет проблем. Затем, если вы уверены, что это работает, попробуйте запустить его из кода Python.
Показать ещё 6 комментариев
2

Пропустите строку, когда вы читаете ее, а не когда пишете.

with open(fullPath, 'rb') as file:
    csv_data = csv.reader(file)
    next(csv_data)
    mycursor = mydb.cursor()
    cursor = mydb.cursor()
    for row in csv_data:
            cursor.execute('INSERT INTO jeremy_table_test(sha1,vsdt,trendx)'
                'VALUES(%s, %s, %s)',[(row[0]),(row[1]),(row[2]))
    mydb.commit()
    cursor.close()
    print("Done")
  • 0
    спасибо, теперь моя единственная проблема состоит в том, чтобы удалить символы в моем втором столбце
  • 1
    Можете ли вы объяснить, почему используются два разных курсора? Жесткий только 1 используется. А в next(csvreader) что такое csvreader?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню