固水 发表于 2020-11-25 09:56

TXT,xls,mysql之间数据格式转换,新手上路

最近学了模块,初步了解了简单的批量文件内容的处理,但是网上看的都太高深了,看不懂数据的处理格式的转换,毕竟刚接触吗,自己就简单的写一写 ,很简单的一些东西,打打基础





import pymysql,xlwt,xlrd
#我只写了简单的四行数据
#f.writelines('''
#name,age,sex,分数
#Tom,18,男,90
#john,19,女,80
# hi,20,男,90''')


import pymysql,xlwt,xlrd
def txt_excel():#首先最简单的是txt_excel 我用的是先读出一个列表,遍历列表得出每一行的数据是个字符串,
#然后用spilt以逗号分割成一个新列表,把每个数据都加到相应的表格里
    f = open('a.txt', 'r', encoding='utf-8')
    f1 = f.readlines()
    t = xlwt.Workbook(encoding='utf-8')
    sheet = t.add_sheet('phthon1', cell_overwrite_ok=True)
    for i in range(len(f1)):
      # print(f1)
      if ',' in f1:
            ii=f1.split(',')
            for iii in range(len(ii)):
                sheet.write(i,iii,ii)
                # print(iii)
      else:
            sheet.write(i, 0, f1)
    t.save('测试1.xls')

    f.close()
# txt_excel()

def excel_txt():#这个就简单了 依据统计的行数来做循环,取出每行的数据,用join粘接起来{:1_927:}
    f=open('b.txt','w',encoding='utf-8')
    t=xlrd.open_workbook('测试1.xls')

    sheet =t.sheets() # 下标位置选择
    for i in range(sheet.nrows):#统计行数做循环
      tt=sheet.row_values(i)   #读出每行的数据
      b=','.join(tt)    #把读出的列表直接粘接成字符串
      f.write(b)    #写入
    f.close()      #关闭
# excel_txt()

def txt_mysql():   #把txt 转mysql,这里的汉字字段名为啥不能直接加,气死,各位大佬指点指点求助?1
    f=open('a.txt','r',encoding='utf-8')
    f1=f.readlines()
    conn=pymysql.connect(host='192.168.10.182',port=3306,
                         user='root',passwd='123456',charset='utf8')#连接数据库
    ttt=conn.cursor()   #创建游标
    ttt.execute('use zuoye4;')   #进入某一个数据库

    ttt.execute('create table xxx(name varchar(20),age int,sex varchar(20))' )# 创建数据库 我一开始想的是循环加入,
#是我天真了,数据之间的格式不一样,不知道咋办,只能自己加了求助?2
    conn.commit()#提交一下操作
    ttt.execute('alter table xxx add 分数 float ' )   #这玩意真的nt
    conn.commit()
    # ttt.execute('drop table xxx')
    # conn.commit()

    ttt.execute('show tables;')
    print(ttt.fetchall())

    for i in range(1,len(f1)):      #直接从第二行读,第一行是字段名
      c=f1.replace('\n','')          删除字符串的小尾巴\n
      d=c.split(',')                        #分割成一个列表
      ttt.execute(f"INSERT INTO xxx VALUES('{d}',{d},'{d}',{d})")   #这里不同的数据类型里有的数据要引号,有的不用,真变态,
#不过从数据库中转出的数据再加入数据库就没这个烦恼了,不知道为什么,求助?3
      conn.commit()

    ttt.execute('select * from xxx ')
    print(ttt.fetchall())

    conn.close()
# txt_mysql()

def mysql_txt():
    f=open('c.txt','w',encoding='utf-8')

    conn=pymysql.connect(host='192.168.1.190',port=3306,
                         user='root',passwd='123456',charset='utf8')   #连接数据库
    ttt=conn.cursor()

    ttt.execute('show databases;')
    ttt.execute('use zuoye4;')
    ttt.execute('show tables;')
    # ttt.execute('drop tables xxx')   

    ttt.execute('desc xxx')    #查看表结构,会有个大元组包裹小元组产生,我们要的字段名在小元组的第一个,取下标就行了
    i=ttt.fetchall()          #用fetchall显示结果 给个变量
    f.write(f"{i},{i},{i},{i}"+'\n')   #加入

    ttt.execute('select * from xxx;')   #查看表内容 会有个大元组包裹小元组产生
    for i,j in enumerate(ttt.fetchall()):    #循环取每行数据    这里我偷懒了因为我每行只有四个数据,我没用循环加入
      f.write(f'{j},{j},{j},{j}'+'\n')    #加入到txt   \n换行   

    f.close()
    conn.close()
# mysql_txt()

def mysql_excel():   #类似于上边的
    t=xlwt.Workbook(encoding='utf-8')
    sheet=t.add_sheet('python1',cell_overwrite_ok=True)   

    conn=pymysql.connect(port=3306,user='root',host='192.168.10.182',password='123456',charset='utf8')
    m=conn.cursor()
    m.execute('use zuoye4;')

    m.execute('desc xxx')
    m1=m.fetchall()
    for i in range(len(m1)):
      sheet.write(0,i,m1)   #先把字段名加入excel

    m.execute('select * from xxx')
    m2=m.fetchall()
    # print(m2)
    # input(' ')
    for i in range(len(m2)):    #统记有几行   用作行
      for y in range(len(m2)):    #统计每行有几个数据   用作列
            print(m2)
            # input(';')
            sheet.write(1+i,y,m2)    #循环写入每个数据记得行数要加1 不要覆盖了首行内容
    # m.execute('')
    # m.execute('')

    # sheet.write(0,0,'')
    t.save('测试11.xls')
    conn.close()
# mysql_excel()

def excel_mysql():   
    t=xlrd.open_workbook('测试11.xls')
    sheet=t.sheets()
    conn=pymysql.connect(port=3306,user='root',password='123456',charset='utf8',host='192.168.10.182')
    m=conn.cursor()
    m.execute('use zuoye4;')

    # m.execute('drop tableyyy;')
    # conn.commit()

    tt=sheet.row_values(0)
    print(tt,tt,tt,tt)
    input(';')
    m.execute(f'create table yyy ({tt} varchar(10),{tt} int,{tt} varchar(10));')
    conn.commit()
    m.execute(f'alter table yyy add {tt} float;')   #汉字真特殊!
    conn.commit()

    for i in range(1,sheet.nrows):
      tt1=sheet.row_values(i)
      tt2=tuple(tt1)
      # print(tt2)
      # input(';')
      m.execute(f'insert into yyy values {tt2};')   #这里的数据是我直接从上个mysql到excel转换的拿过来直接用的
#,掏出来一看直接格式就有了,一脸懵,直接加求助?4
      conn.commit()

    m.execute(f'select * from yyy')
    print(m.fetchall())

    conn.close()
# excel_mysql()

qihang5518 发表于 2020-11-25 10:22

谢谢分享,学习经验

恒大大 发表于 2020-11-25 10:24

如果txt文档很大了几十个G你咋办。

固水 发表于 2020-11-25 10:37

恒大大 发表于 2020-11-25 10:24
如果txt文档很大了几十个G你咋办。

。。。为难我了,大佬,我会选择上网找

Natu 发表于 2020-11-25 11:03

实践是检验学习的最佳途径,楼主加油!

xuanmuluck 发表于 2020-11-25 13:07

在吾爱诸位大神资料的支持下,成功安装了navicat ,解决mysql读取excel 等格式数据

zgyong2002 发表于 2021-1-28 15:13

也没看懂
页: [1]
查看完整版本: TXT,xls,mysql之间数据格式转换,新手上路