Sqlite
SQLite:選擇一個唯一的分隔符
我正在開發一個項目,該項目將產生一個大約 6 GB 文本內容(編碼為 UTF-8)的 SQLite 數據庫。文本將是多種多樣的:它將有大量的純文字書寫,但也有大量的特殊字元(波浪號、反引號、節符號、mdash’s、endash’s 等)。還會有數學公式。
看起來
.import
將是載入方法。問題:我可以將什麼用作
.separator
文本中沒有的值?我已經用一些想法對未來的文本進行了篩選,並且沒有確定不在實際內容中的分隔符。
我想我可以逃避文本中可能存在的任何分隔符。但如果可以的話,我寧願避免這種選擇。
我正要建議使用多字元分隔符或外語字元(例如
日
),但.separator
不允許使用多字元串甚至多字節字元。我會使用一個多字元分隔符,在要導入的文本中出現機率非常低,然後使用自定義腳本解析文件。這是 Python3 中
$$$$$$
用作分隔符的範例,但[ŠĐć~^˘°˛˙€]
如果需要,請考慮類似字元串。導入.csv
hello $$$$$$ world $$$$$$ 1 foo $$$$$$ bar $$$$$$ 2
sqliteimport.py
import sqlite3 import_file_name = "import.csv" cell_separator = "$$$$$$" lines = [] insert_query = "INSERT INTO imported (a, b, c) VALUES (?, ?, ?);" db_connection = sqlite3.connect("database.sqlite") db_cursor = db_connection.cursor() db_cursor.execute("CREATE TABLE imported (a TEXT, b TEXT, c INTEGER);") db_cursor.execute("BEGIN TRANSACTION") with open(import_file_name, 'r') as import_file: for line in import_file: # Split each line at each cell_separator into a list of strings. # Strip each one of the columns to remove whitespaces. cleaned_columns = [column.strip() for column in line.split(cell_separator)] db_cursor.execute(insert_query, tuple(cleaned_columns)) db_connection.commit() db_cursor.execute("VACUUM;") db_cursor.close() db_connection.close()
您可以使用控製字元作為分隔符,例如
.separator ^A ^B
其中 ^A 和 ^B 應替換為相應的控製字元。