目的
要把很多个文本文件的内容(固定格式),批量导入到数据库,方便以后查询。
前言
刚接触 Python,把自己的心得分享给大家
电脑系统:Win7 X64 代码编辑器:Visual Studio Code,扩展中安装 Python Python版本:3.8.4,当中已经集成 SQLite3,不用另外安装
测试文本文件:a1.txt,a2.txt 格式如下:
a1.txt
A1001,zhangyi
A1002,zhanger
A1003,zhangsan
a2.txt
A2001,liliyi
A2002,lilier
A2003,lilisan
思路
循环文件夹内所有文本文件文本文件内容转换为数据库需要的格式,且放到列表变量中把列表变量数据插入到数据库
编程
经多次测试发现,下面这种方式处理效率最高:
import sqlite3, glob, time
Dir0=input('请输入文件所在的文件夹(格式 c: 或 c:/abc):')
# 查找输入的文件夹下所有 .txt 文件,不包含子文件夹
Dir1=glob.glob(Dir0+r'/*.txt')
Int0=len(Dir1) # 总文件数
if Int0 == 0:
print(Dir0,'目录下没有所需文件')
# 数据库连接
conn = sqlite3.connect('z:\\1.db')
# 创建一个表 p (判断表是否存在,不存在就创建一个)
conn.execute('CREATE TABLE IF NOT EXISTS p (ID CHAR(50),Name CHAR(50))')
Int1=0 # 打开第几个文件
for Row0 in Dir1:
# 计时开始,用于查看处理文件所需时间
start = time.perf_counter()
# 列表变量要先设定
List0=[]
Int2=0 # 文本总行数
Int1 += 1
print('总文件数:',Int0 ,' 正在打开第',Int1 ,'个文件。 文件名:',Row0)
File0 = open(Row0) # 打开文本文件
for Row1 in File0.readlines() :
# 根据文本格式,查找 ',' 逗号所在字符串位置
Int10=Row1.find(',')
# 取逗号左面字符串
Str1=Row1[:Int10]
# 取逗号右面字符串,文本文件内每行字符串后有一个换行符,所以要 -1
Str2=Row1[Int10+1:len(Row1)-1]
Str0 = Str1,Str2
List0.append(Str0) # 列表变量添加新数据
Int2 +=1
File0.close() # 关闭文本文件
print ('处理文本用时:', time.perf_counter() - start)
print ('文本行数 =',Int2)
# 往表中插入数据。conn.executemany 可以一次插入多行数据。
# conn.execute 每次只能插入一行数据,且要放入循环内,效率低得多
conn.executemany('INSERT INTO p (ID,Name) VALUES (?,?)',(List0))
conn.commit() #事物完结
print ('插入数据用时:', time.perf_counter() - start)
Rs1 = conn.execute("SELECT count(*) from p")
print('表总行数 =',Rs1.fetchone()[0])
print('')
Rs2 = conn.execute("SELECT ID,Name from p")
for Row2 in Rs2:
print ("ID = ", Row2[0])
print ("Name= ", Row2[1])
conn.close()
结果如下:
请输入文件所在的文件夹(格式 c: 或 c:/abc):z:
总文件数: 2 正在打开第 1 个文件。 文件名: z:/a1.txt
处理文本用时: 0.005185218999999908
文本行数 = 3
插入数据用时: 0.014957353000000229
表总行数 = 3
总文件数: 2 正在打开第 2 个文件。 文件名: z:/a2.txt
处理文本用时: 0.0011917829999998908
文本行数 = 3
插入数据用时: 0.010902635999999966
表总行数 = 6
ID = A1001
Name= zhangyi
ID = A1002
Name= zhanger
ID = A1003
Name= zhangsan
ID = A2001
Name= liliyi
ID = A2002
Name= lilier
ID = A2003
Name= lilisa
结束
实际使用中,插入100万条数据,运行效率还算满意
请输入文件所在的文件夹(格式 c: 或 c:/abc):d:
总文件数: 2 正在打开第 1 个文件。 文件名: d:\1.txt
处理文本用时: 0.724840726
文本行数 = 559103
插入数据用时: 3.0582557649999984
表总行数 = 559103
总文件数: 2 正在打开第 2 个文件。 文件名: d:\2.txt
处理文本用时: 0.7421396850000015
文本行数 = 559103
插入数据用时: 3.5078366950000017
表总行数 = 1118206
文章浏览阅读2.2k次。文章来源: http://www.blockchainbrother.com/在国外,区块链保险联盟B3i成立于2016年10月,联盟成员包含了美国再保险集团、Liberty Mutual保险公司、汉诺威保险公司、SCOR、杰勒拉利保险集团、瑞士苏黎世保险集团、瑞士再保险集团、慕尼黑保险集团、安联保险集团等等。这一平台将全球最大的保险集团连接到链上,力图使用已经成熟的区块链智能合约技术,提..._区块链保险概述
文章浏览阅读2.2k次。堆内存分配概述The ESP32 has multiple types of RAM. Internally, there’s IRAM, DRAM as well as RAM that can be used as both. It’s also possible to connect external SPI RAM to the ESP32 - external RAM can..._malloc_cap_dma
文章浏览阅读1.9k次。laravel配置memcache_laravel 框架memcache的配置
文章浏览阅读1.3w次,点赞5次,收藏5次。使用conda安装pyopengl-accelerate后,运行时出现AttributeError: module 'numpy' has no attribute 'float128'错误,原因是Windows上微软编译器不支持numpy.float128数据类型,解决办法是使用pip安装第三方修改的whl安装包。具体步骤:首先去https://www.lfd.uci.ed..._module 'numpy' has no attribute 'float128
文章浏览阅读2.4k次。1.前言今天帮一位同学将一个.STEP文件导入SimScape中进行仿真,因为自己很久没有导入新的模型了,一直在用旧模型,所以对导入文件的操作有点生疏了,在查了一些资料和碰壁之后想起来了,特此记录一下。2.问题1:SW模板文件无效在用SW打开.STEP装配体文件时,提示:solidworks the default templates are not valid,即模板无效,如果点击continue,则显示为空白,此时需要对template文件路径重新设置一下即可3.SW安装SimSca_simscape app 导出 模型
文章浏览阅读603次。softmax函数的引入在多分类神经网络中直接使用输出层的输出有两个问题:1. 一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。例如,刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果o1=o3=103o_1=o_3=10^3o1=o3=103,那么输出值10却又表示图像类别为猫的概率很低。2. 另一方面,由于真..._通过fashion mnist 数据集 训练一个softmax分类器,实现分类功能。fashion mnist
文章浏览阅读1.6k次。如果您看过《HTML是什么?——零基础自学网页制作》这篇教程,请按照其中说明创建一个txt文件。具体过程如下:step1:在您方便的磁盘中建立一个文件夹,命名为"零基础自学网页制作"。例如我在D盘中建立了"零基础自学网页制作"文件夹。step2:在文件夹中创建"HTML框架.txt"文件。鼠标移动到空白处点击右键选择"文本文档"。命名为"html框架",如下图所示。如果您的电脑没有显示".txt"..._网页用txt修改后如何再变成网页文件
文章浏览阅读8.1k次,点赞2次,收藏13次。iTest-是gt外的另一款记录android app消耗的cpu/内存/流量 /电量的工具,1.下载并安装到手机2.打开itest并注册(有些功能需要注册才能使用),点击监控应用的增加按钮,选择要测试的应用。点击监控指标选择要监控的指标3.点击启动监控,然后操作该应用即可。4.测试完成后,回到itest界面,点击停止监控,自动保存监控的数据。5.点击主_itest app性能监控cpu怎么看
文章浏览阅读287次。List<E> :有序且允许重复的容器;//我一般直接把他称为线性表熟悉的实现类有AbstractList<E>//随机访问数据结构的父类(如数组,ArrayList就是它的实现类);AbstractSequentialList<E> extends AbstractList<E>//连续访问数据结构的父类(如链表,LinkedList就是它的实..._java.until.list是
文章浏览阅读2.4k次,点赞2次,收藏6次。最近偶尔有人问我程序员网上有什么好的学习网站,说实话,现在网上资源比较多,也比较杂乱,我这里给大家推荐几个,希望大家喜欢,如果觉得不错的话,文末请点赞顺手加个关注。1、哔哩哔哩登录网址:https://www.bilibili.com/bilibili 是国内知名的视频弹幕网站,通过动漫打出了名声,最近几年发展势头迅猛,里面有不少有创意的 Up 主,不乏一些有趣的程序员,也有很多免费的视频学...
文章浏览阅读506次。G. Most Common Suffixtime limit per test1.0 smemory limit per test512 MBinputstandard inputoutputstandard outputYou are given n strings, and q queries. For each query i, your task is..._gym 101502g
文章浏览阅读1.6w次,点赞3次,收藏7次。第一种SUSE Linux IP设置方法ifconfig eth0 192.168.1.22 netmask 255.255.255.0 uproute add default gw 192.168.1.2释义:#IP配置,包括子网掩码,看情况修改eth0和192.168.1.22 #网关修改 ,看情况修改192.168.1.2 第二种SUSE Linux IP设置方法在suse操_suse配置ip地址