python自动化办公操作:mysql存储、时间、遍历文件夹、拼接地址、读取pdf、word、测试代码运算速度2021.8.2

2022-09-22 08:14:19 浏览数 (1)

1、mysql存储

代码语言:javascript复制
import pymysql


###########################################################################
    #建立一个MySQL连接
    conn = pymysql.connect(
            host='XXX.XXX.XXX.XXX', #填写自己的mysql地址、帐号、密码
            user='root',
            passwd='XXXXXXXX',
            db='test',
            port=3306,
            charset='utf8'
            )
    # 获得游标
    cur = conn.cursor()
    # 创建插入SQL语句,需要修改表名xxxxx.xxxxxx
    query = 'insert into test.20210727gps (yesterday,里程,停留) values (%s, %s, %s)'
    # 创建一个for循环迭代读取xls文件每行数据的, 从第二行开始是要跳过标题行
    values = (yesterday,里程,停留)
    # 执行sql语句
    try:
        cur.execute(query, values)
        conn.commit()
    except:
        # 回滚
        conn.rollback()
        print('未写入')
    #    continue
        
    cur.close()# 关闭游标
    conn.close()# 关闭数据库

2、mysql默认记录时间戳,数据类型:timestamp默认:CURRENT_TIMESTAMP

3、遍历文件夹

代码语言:javascript复制
import os
#导入文件
# path表示路径
path=r"D:下载文件2021.7.8"
# 返回path下所有文件构成的一个list列表
filelist=os.listdir(path)
# 遍历输出每一个文件的名字和类型
count = 0
for 文件名 in filelist:
    count  =1
    if count < 30000:
    # 输出指定后缀类型的文件
     if(文件名.endswith('.docx')):
        print(文件名)
#        print(type(文件名))

4、拼接地址

代码语言:javascript复制
import os
base_dir = os.path.dirname(__file__)
# 获取当前文件目录
path = os.path.join(base_dir,'6-1.doc')
# 获取文件拼接后的路径
print(path)

5、读取pdf

代码语言:javascript复制
import pdfplumber

内容 = ''
with pdfplumber.open("18-1.pdf") as p:
#    page = p.pages[2]
    for page in p.pages:
#        print(page.extract_text())
        内容  = page.extract_text()
    print(内容)

6、读取word的docx和doc

代码语言:javascript复制
import docx
import win32com.client as wc

def 写入SQL(文件名,内容):
  pass

def doc读取(文件名):
    #doc文件另存为docx
    word = wc.Dispatch("Word.Application")

    base_dir = os.path.dirname(__file__)
    # 获取当前文件目录
    path = os.path.join(base_dir,文件名)
#    path = os.path.abspath(base_dir,文件名)
    # 获取文件拼接后的路径
#    print(path)
    doc = word.Documents.Open(path)  
#    doc = word.Documents.Open(原地址)
    #上面的地方只能使用完整绝对地址,相对地址找不到文件,且,只能用“\”,不能用“/”,哪怕加了 r 也不行,涉及到将反斜杠看成转义字符。
    
    doc.SaveAs(r"C:\Users\Administrator\Desktop\临时.docx", 12, False, "", True, "", False, False, False, False)#转换后的文件,12代表转换后为docx文件
    #doc.SaveAs(r"F:\***\***\appendDoc\***.docx", 12)#或直接简写
    #注意SaveAs会打开保存后的文件,有时可能看不到,但后台一定是打开的
    sleep(3)
    doc.Close()
    sleep(3)
    word.Quit()
#    pythoncom.CoUninitialize()   
    path = "C:\Users\Administrator\Desktop\临时.docx"
    document = docx.Document(path)

#    document = docx.Document(文件名)
    内容 = ''
    for paragraph in document.paragraphs:
        内容  = paragraph.text  'n'
    # 遍历所有表格
    for table in document.tables:
#                print ('----table------')
        for row in table.rows:  # 遍历表格的所有行
            # 遍历所有行的所有单元格内容
            for cell in row.cells:
                内容  = cell.text  'n'
#    print(内容)
    print(len(内容))
    写入SQL(文件名,内容)
#    return 内容
代码语言:javascript复制
def docx读取(文件名):
    document = docx.Document(文件名)
    内容 = ''
    for paragraph in document.paragraphs:
#            print(paragraph.text)
#            print(paragraph.text)
#            print(type(paragraph.text))
        内容  = paragraph.text  'n'
#            print(内容)
#            print(len(内容))
#            print(文件名)
    # 遍历所有表格
    for table in document.tables:
#                print ('----table------')
        for row in table.rows:  # 遍历表格的所有行
            # 按原格式输出数据
            # row_str = 't'.join([cell.text for cell in row.cells])
            # print(row_str)
            # 遍历所有行的所有单元格内容
            for cell in row.cells:
#                        print (cell.text, 't')
                内容  = cell.text  'n'
#    print(内容)
    print(len(内容))
    写入SQL(文件名,内容)
#    return 内容

6、测试代码运算速度

方法1:print方法

代码语言:javascript复制
import time

start_time=time.time()  #开始时间
end_time=time.time()   #结束时间
print("time:%d"  % (end_time-start_time))  #结束时间-开始时间
print("time:%.4f"  % (start_time-end_time))

方法2:装饰器方法

代码语言:javascript复制
import time

# 装饰器,计算程序运行时间
def start_time(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        print(func.__name__, time.time() - start)
        return res

    return wrapper


# 使用 append 和 join 实现连续字符串拼接
@start_time
def test_1(frequency, string):
    s = []
    for i in range(frequency):
        s.append(string)
    return ''.join(s)


# 使用  = 实现连续字符串拼接
@start_time
def test_2(frequency, string):
    s = ''
    for i in range(frequency):
        s  = string
    return s


name = 'P'
for i in range(25):
    print('n数据量为2的{}次方'.format(i))
    f = 2 ** i
    test_1(f, name)
    test_2(f, name)

0 人点赞