用Python把txt導入SQLite3數據庫

題庫txt:

 
 
 

代碼:

import sys
import re
import sqlite3

cx = sqlite3.connect('./avpig_sde.db')  #創建數據庫,如果數據庫已經存在,則鏈接數據庫;如果數據庫不存在,則先創建數據庫,再鏈接該數據庫。
cu = cx.cursor()         #定義一個遊標,以便獲得查詢對象。
cu.execute('create table if not exists a41 ([_id] integer PRIMARY KEY AUTOINCREMENT, [content] varchar NOT NULL, [answer] varchar NOT NULL, [parse] varchar, [note] varchar, [type] int NOT NULL, [chapter_id] varchar NOT NULL, [url] VARCHAR)')  #創建表

content_list=[]
anwser_list=[]

# 第一種寫法
# patch_file_name="gj_1.txt"
# patch_file=open(patch_file_name,'r')        #打開文檔,逐行讀取數據
# content=patch_file.read()
# patch_file.close()
# content_list=re.split('[答][案][:][A-D][.]', content)
# #print(content_list)

i = 0
#第二種寫法
with open('gj_1.txt','r') as f1:
    contents = f1.read()
    content_list=re.split('[答][案][:][A-D][.]', contents)
    print(content_list)

with open('gj_1.txt','r') as f:
    for line in f:
        index = line.find('答案:')
        print(index)
        if index != -1:#表示沒有找到“答案:”
            anwser_list.append(line[int(index+3)])
            print(anwser_list)
            print(content_list[i])
            cu.execute('insert into a41 (_id, content, answer, type, chapter_id) values (?,?, ?,?,?)',(i+1, content_list[i].strip(), anwser_list[i].strip(), 1,"1."))
            i +=1
        #anwser_list.append(list(line.strip('\n').split(','))[0])
# print(anwser_list)
# print(content_list)

cu.close()   #關閉遊標
cx.commit()   #事務提交
cx.close()   #關閉數據庫

註釋:

  1. 首先連接SQLite3數據庫
  2. 之前沒有數據庫就直接用SQL語句創建。
  3. 讀txt文件到內存中,讀成 list[]
  4. 再用SQL語句導入SQLite3數據庫
  5. 關閉數據庫
 

知識點:

1.讀取txt文件有這裏有兩種寫法,第一種
 
patch_file_name="gj_1.txt” 
patch_file=open(patch_file_name,'r')        #打開文檔,逐行讀取數據 
content=patch_file.read() 
patch_file.close()
content_list=re.split('[答][案][:][A-D][.]', content)
這裏用了正則表達式:
[答][案][:][A-D][.] 表示 匹配 “答案:A到D” 的所有結果。
 
2.讀取txt文件的第二種寫發, with open
with open('gj_1.txt','r') as f

這種方法不需要再去寫close文件的代碼,他會自動去close。可以整體讀取用read(),輸出結果是一個list[]. 也可以用 for … in… 遍歷出每個元素。

3.split函數,表示把list按照給出的參數進行分割。   
 content_list=re.split('[答][案][:][A-D][.]', contents)
4.strip()函數,表示去掉字符串兩頭的空格。
anwser_list[i].strip()

e.g 我是頭部空格__我是內容__我是尾部空格.strip() -> 我是內容

發佈了27 篇原創文章 · 獲贊 20 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章