Как я могу отделить текст к другому столбцу в базе данных из файла .txt? (разделитель - это строка) - PullRequest
0 голосов
/ 20 октября 2019

Я получил файл .txt, например: «Rock также известен как: Альтернативный рок». Мне нужно импортировать его в базу данных, используя sqlite3 и python. Каждый тип в отдельном столбце, например:

Rock |Alternative Rock

Спасибо.

|: отдельные столбцы.

import sqlite3
conn = sqlite3.connect('chinook(1).db')
cur = conn.cursor()


file=open('subgenres3.txt','r') 
try: 
        file = open('subgenres3.txt', 'r') 
except: 
    print("file not found")  

f=file.read()
f=f.split("\n")   



for line in f:  
    cur.execute("INSERT INTO subgénero (subgenrename,subgenrealtname) VALUES (?,?)", (line,line)) 

conn.commit() 
conn.close()

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Если вы хотите сохранить все в Python, то я предлагаю использовать регулярные выражения (регулярные выражения) в Python . Следующее регулярное выражение должно быть совместимо с последним модулем python re. Он имеет две группы захвата, которые соответствуют первому и второму полям.

^((?:\w|\s)+) also know as: ?((?:\w|\s)+?\w)\s*?$

Фрагмент, который получит два значения поля для каждой строки, будет выглядеть примерно так:

p = re.compile('^((?:\w|\s)+?) also know as: *?((?:\w|\s)+?\w)\s*?$')

for line in f:
   m = p.match(line)
   subgenrename = m.group(1)
   subgenrealtname = m.group(2)
   ...
0 голосов
/ 20 октября 2019

Вот эффективное решение с использованием sed и sqlite3. Он иллюстрирует, как подойти к проблеме, и может быть легко адаптирован для использования с любым количеством Python:

sed 's/ *also known* as: */,/' subgenres3.txt > subgenres3.csv

cat <<EOF | sqlite3 'chinook(1).db'
CREATE TABLE IF NOT EXISTS subgénero (subgenrename,subgenrealtname);
.mode csv
.import subgenres3.csv 'subgénero'
EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...