抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

可将简单的csv文件转成sqlite数据库,将csv第一行作为表名,建议不要出现合并列。代码包含phppython两个版本,无需安装其他框架、依赖,配合Code Runner插件在vscodeCode编辑器中直接执行,或保存为本地文件在终端中运行(需要安装运行环境),即可将csv文件转为sqlite数据库。

代码

csv2sqlite.php
<?php
// 定义 CSV 文件路径
$csvFile = './China-City-List-latest.csv';

// 定义 SQLite 数据库路径
$dbFile = './database.db';

// 检查 SQLite 数据库文件是否存在,如果不存在则创建
if (!file_exists($dbFile)) {
touch($dbFile);
}

// 连接 SQLite 数据库
$db = new SQLite3($dbFile);

// 读取 CSV 文件的第一行以获取列名
$handle = fopen($csvFile, 'r');
$headers = fgetcsv($handle);

// 检查列名是否有重复
$uniqueHeaders = [];
$seen = [];

foreach ($headers as $header) {
if (isset($seen[$header])) {
$seen[$header]++;
$uniqueHeaders[] = $header . '_' . $seen[$header];
} else {
$seen[$header] = 1;
$uniqueHeaders[] = $header;
}
}

// 创建表
$columns = implode(', ', array_map(function($header) {
return "`$header` TEXT";
}, $uniqueHeaders));

$db->exec("CREATE TABLE IF NOT EXISTS data ($columns)");

// 插入数据
while (($data = fgetcsv($handle)) !== FALSE) {
$values = implode("', '", array_map([$db, 'escapeString'], $data));
$db->exec("INSERT INTO data VALUES ('$values')");
}

// 关闭文件和数据库连接
fclose($handle);
$db->close();
echo "CSV 数据已成功导入到 SQLite 数据库中。";
csv2sqlite.py
import csv
import sqlite3

# 定义 CSV 文件路径
csv_file = './China-City-List-latest.csv'

# 定义 SQLite 数据库路径
db_file = './database.db'

# 连接 SQLite 数据库(如果数据库不存在,会自动创建)
conn = sqlite3.connect(db_file)
cursor = conn.cursor()

# 读取 CSV 文件的第一行以获取列名
with open(csv_file, 'r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
headers = next(reader)

# 检查列名是否有重复
unique_headers = []
seen = {}

for header in headers:
if header in seen:
seen[header] += 1
unique_headers.append(f"{header}_{seen[header]}")
else:
seen[header] = 1
unique_headers.append(header)

# 创建表
columns = ', '.join([f'"{header}" TEXT' for header in unique_headers])
cursor.execute(f"CREATE TABLE IF NOT EXISTS data ({columns})")

# 插入数据
with open(csv_file, 'r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
next(reader) # 跳过表头
for row in reader:
placeholders = ', '.join(['?'] * len(row))
cursor.execute(f"INSERT INTO data VALUES ({placeholders})", row)

# 提交事务并关闭连接
conn.commit()
conn.close()

print("CSV 数据已成功导入到 SQLite 数据库中。")

评论