如何将文本从.txt文件中分离到数据库中的另一列(分隔符是字符串)

2024-09-29 23:23:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了这样一个.txt文件: “岩石也被称为:另类岩石” 我需要使用sqlite3和python将其导入数据库。 每种类型在不同的列中,例如:

岩石|替代岩石

谢谢

|:单独列

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()

Tags: 文件importtxt数据库类型connectlineopen
2条回答

下面是一个使用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

如果您想将所有内容都保存在python中,那么我建议使用regular expressions (regex) within python。下面的正则表达式应该与最新的pythonre模块兼容。它有两个与第一个和第二个字段匹配的捕获组

^((?:\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)
   ...

相关问题 更多 >

    热门问题