python问题集合

安装问题:

普通安装:

pip install 安装包

加镜像安装

pip install 安装包 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

问题报错

问题原因:引入了pdf转图片模块fitz,报这个错

ModuleNotFoundError:No module named'frontend'

解决办法:pip install PyMuPDF

数据库相关问题报错

问题:插入数据,连接断开

pymssql.InterfaceError: Connection to the database failedforan unknown reason. 

解决办法::用try....except:,当sql执行错误的时候,重新进行MySQL库的连接

        try:
            sql = 'sql脚本'
            cursor.execute(sql)
        except:
            sql_erro = open('错误日志地址', 'a+')
            sql_erro.writelines(file_id + "----" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + '\n')
            #打印错误日志,并存入日志文件
            traceback.print_exc(file=sql_erro)
            #重新连接MySQL,并创建游标
            conn.ping()
            # 使用 cursor() 方法创建一个游标对象 cursor
            cursor = conn.cursor()
            sql = 'sql脚本'
            cursor.execute(sql)

文档数据提取问题

读取docx文档,用python-docx打开进行数据提取报错,文档类型就是.docx

KeyError: "There is no item named 'docProps/thumbnail.jpeg' in the archive"

解决办法:将整个docx文档内容全部读出来,用textract

import textract
    # 方法一:可以将下面这些保存到报错日志里面逐行读取,缺点:只能识别文字部分,表格数据丢失
    # try:
    #     document=zipfile.ZipFile(file_path,'r', zipfile.ZIP_DEFLATED)
    #     xml=document.read("word/document.xml")
    #     wordObj=BeautifulSoup(xml.decode("utf-8"),features="xml")
    #     texts=wordObj.findAll("w:t")
    #     for text in texts:
    #         print('=====',text.text)
    #         file_txt.writelines(text)
    # except zipfile.BadZipFile:
    #
    #     file_erro.writelines(file_id + "----" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + '\n')
    #     traceback.print_exc(file=file_erro)
#    方法二:将所有文本读取成字符串,用的是textract包
    text_file=textract.process(file_path)
    # text_file格式是b'文本内容',将bytes转换成str
    str_text=str(text_file, encoding='utf-8')
    print("=====",str_text)

函数的介绍及用法示例

遍历文件夹下所有文件(os.listdir):

for i in os.listdir('文件夹路径'):

读docx文件方式(docx或者textract):

#方式一:用docx处理
#但是针对文字和表格要分开:
#文字是按段落进行遍历的
    document = docx.Document('文件路径')
    for i in range(len(document.paragraphs)):
        paragraph = document.paragraphs[i].text
#表格数据,是按表遍历,然后再按行遍历,之后按每行的每个单元格进行遍历
    document = docx.Document('文件路径')
    row_index = 0
    #表
    for table in document.tables:
        # print(table)
        #表行
        for row_index, rows in enumerate(table.rows):
        #表行每单元
            for cell in rows.cells:
            #获取单元格数据
                cell_text = cell.text
#方式二:textract处理
#将整个docx文档识别成文本
        text_file=textract.process(file_path)
    # text_file格式是bytes的格式,将bytes转换成str,才可进行字符串相关操作
        str_text=str(text_file, encoding='utf-8')

复制文件到另一个文件夹(shutil):

#用shutil和os
#os主要是遍历文件夹内文件,进行拼接可以形成文件的具体路径
#shutil,将拼接好的路径和新路径放在一起,由下面代码实现复制shutil.copyfile(old_file_path,new_file_path)
#多个文件复制,则加上os的文件遍历,如下代码所示
old_path= 'D://20221122PCN转换//'
new_path = 'D://docx_test//'
old_dir_list=os.listdir(old_path)
for old_dir_file in old_dir_list:
    file_type=old_dir_file[-4:]
    file_id=int(old_dir_file[0:len(old_dir_file)-5])
    if file_type=='docx':
        old_file_path=old_path+old_dir_file
        print(old_file_path)
        if file_id>0 and file_id<=50000:
            new_file_path = new_path+"0_50000//"+ old_dir_file
            print(new_file_path)
            shutil.copyfile(old_file_path,new_file_path)
        else:
            continue

链接MySQL数据库(pymysql):

import pymysql

conn = pymysql.connect(host='地址',
                       port=3306,
                       user='账号',
                       passwd='密码',
                       charset='utf8'
                       )
#建立游标
cursor = conn.cursor()
#运行sql脚本
cursor.execute(sql)

连接到clikhouse

from clickhouse_driver import Client
host_name = '地址'
client = Client(host = host_name,
                # database = '数据库',
                user = '账号',
                password = '密码',
                port=9000)
client.execute(selsql)

语言判断中文、日文等(langdetect和langid)

注:语言类型主要参考的是ISO 639-1语言编码标准,详见ISO 639-1百度百科

个人使用感受:langdetect主要是看首字符是什么语言就是什么语言,当然,可以取比例最高的,而langid是取得占比最高的语言,有时候会不准,看自己取舍了

#方法一:langdetect
#这是直接看是什么语言的
from langdetect import detect
#这是看各个语言的占比
from langdetect import detect_langs

s1  ="how are you:中文中文中文中文中文中文중국어dsds中国語中国語中国語"print(detect(s1))
print(detect_langs(s1)) 

结果:
en    # 英文
[en:0.4285710541309797, zh-cn:0.4285702310485093, cy:0.1428561681475863] # 这里是所探测的句子中包含的比例及其所占的比例。







#方法二:langid

import langid
s3 = "how are you:中文中文中文中文중국어dsds中国語中国語中国語"
print(langid.classify(s3))   # langid.classify(s3)输出探测出的语言类型及其confidence score,其confidence score计算方式方法见:https://jblevins.org/log/log-sum-exp


结果:
('zh', -330.6410880088806)   # 中文

你可能感兴趣的:(python,python,mysql,数据库)