python 读取txt数据,处理后插入到mysql

本文介绍如何使用Python爬取网站数据并保存至TXT文件,随后解析这些TXT文件并将数据导入MySQL数据库的过程。涉及编码问题处理、SQL插入语句编写及异常捕获等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

步骤:

#encoding=utf-8
import pymysql

class Mysql(object):
    def __init__(self):
        self.__db_host = "192.168.1.8"
        self.__db_port = 3306
        self.__db_user = "ys"
        self.__db_psw  = ""
        self.__db_database = "my"

    def db_connection(self):
        self.__connection = pymysql.connect(
                                            host=self.__db_host,
                                            port=self.__db_port,
                                            user=self.__db_user,
                                            passwd=self.__db_psw,
                                            db=self.__db_database,
                                            charset='utf8'
                                            )
        # self.
        self.__connection.autocommit(True)
    def execute_no_query(self,command_text,parameters=None):
        effectRow = 0
        try:
            self.db_connection()
            cursor = self.__connection.cursor()
            effectRow = cursor.execute(command_text,parameters)
        except Exception as e:
            print(e)
        finally:
            cursor.close()
            return effectRow

    def db_close(self):
        if hasattr(self, 'conn') and self.__conn:
            self.__conn.close()
  1. 从本地txt文件逐行读取
  2. 拆分行,并插入到数据库
# coding: utf-8
import requests,sys,os,time,json
from wb_db import Mysql

file_path =os.path.join(sys.path[0],"test.txt")

file=open(file_path,'r',encoding='utf-8')
for line in file.readlines():
    uid="null"
    screen_name="null"
    gender="null"
    fans_no=0
    description="null"
    is_followed = "0"
    if line:
        list=[]
        list=line.encode('utf-8').decode('utf-8-sig').strip('\n').split("________")
        uid = list[0] if len(list[0])>0 else "null"
        screen_name = list[1] if len(list[1])>0 else "null"
        gender = list[2] if list[2] in ['f','m'] else 'n'
        fans_no = int(list[3]) if type(int(list[3])).__name__=='int' else 0
        description = list[4] if len(list[4])>0 else "null"
        sql = """
            insert into wbuser (uid,screen_name,gender,fans_no,description,is_followed) VALUES ('%s','%s','%s','%d','%s','%s')"""

        try:
            mysql = Mysql()
            mysql.execute_no_query(sql % (uid,screen_name,gender,fans_no,description,is_followed))
        except Exception as e:
            print(e)
        finally:
            mysql.db_close()
    else:
        break
  1. 写入txt为utf8,逐行读取后开头有 \ufeeff,字符编码问题,处理:读取时把行line.encode('utf-8').decode('utf-8-sig') 
  2. 写入txt时加了换行,读取后末尾有 \n,处理:line.encode('utf-8').decode('utf-8-sig').strip('\n')
  3. sql insert语句values后的占位符需要加引号。
---END---
<think>好的,我现在需要帮助用户找到如何使用Python的pandas读取CSV文件并将数据插入MySQL数据库的示例教程。首先,我应该回顾一下用户提供的参考引用,看看有没有相关的信息。 查看用户给出的引用内容,引用[1]提到了MongoDB和PyMongo,这可能和数据库操作有关,但用户的问题是关于MySQL的,所以可能不太直接相关。引用[2]展示了在Spark中使用SQL查询数据,但用户的问题是关于pandas和MySQL的,所以这里的信息可能帮助不大。引用[3]详细介绍了Python的I/O操作,包括pickle模块和文本文件读写,但也没有直接提到CSV和MySQL的结合使用。 接下来,我应该抛开引用内容,思考用户的具体需求。用户想用pandas的read_csv函数读取CSV文件,然后将数据插入MySQL数据库中。通常,这需要以下几个步骤: 1. 使用pandas读取CSV文件,生成DataFrame。 2. 连接到MySQL数据库,可能需要使用库如pymysqlmysql-connector-python。 3. 将DataFrame中的数据写入MySQL表,可以使用pandas的to_sql方法,或者逐行插入。 然后,我需要确保这些步骤的代码示例正确,并且符合最佳实践。比如,使用SQLAlchemy创建引擎来处理数据库连接,这样可以利用pandas的to_sql方法更方便地写入数据。同时,需要注意数据库连接的参数,如主机名、端口、用户名、密码、数据库名等是否正确设置。 另外,用户可能需要处理数据类型的映射,确保CSV中的数据类型与MySQL表中的列类型匹配。此外,异常处理和批量插入以提高性能也是需要考虑的方面。 现在,我需要整理这些步骤,编写清晰的代码示例,并解释每个部分的作用。同时,根据用户的要求生成相关问题,这些问题应该围绕该主题的扩展,比如性能优化、异常处理、替代方法等。 最后,检查是否所有数学公式和独立公式都正确使用了$...$和$$...$$格式,确保回答结构清晰,引用标识正确添加,但根据用户提供的引用内容,可能没有直接相关的引用,所以可能不需要添加引用标识,或者需要确认是否有合适的引用可以关联。</think>### 如何用Python将CSV文件数据读取插入MySQL 以下是使用`pandas`读取CSV文件插入MySQL数据库的完整步骤和代码示例: --- #### **1. 安装依赖库** 确保已安装以下库: ```bash pip install pandas pymysql sqlalchemy ``` - `pandas`:用于读取CSV文件处理数据。 - `sqlalchemy`和`pymysql`:用于连接MySQL数据库。 --- #### **2. 读取CSV文件** 使用`pandas.read_csv`读取数据并转换为DataFrame: ```python import pandas as pd # 读取CSV文件(假设文件名为data.csv) df = pd.read_csv("data.csv") print(df.head()) # 查看前5行数据 ``` --- #### **3. 连接MySQL数据库** 通过`sqlalchemy`创建数据库引擎: ```python from sqlalchemy import create_engine # 替换为你的MySQL连接信息 username = "root" password = "your_password" host = "localhost" database = "your_database" # 创建引擎(格式:mysql+pymysql://用户名:密码@主机/数据库名) engine = create_engine(f"mysql+pymysql://{username}:{password}@{host}/{database}") ``` --- #### **4. 将DataFrame写入MySQL** 使用`to_sql`方法将数据插入数据库表: ```python table_name = "your_table" # if_exists参数控制表存在时的行为(replace: 覆盖;append: 追加) df.to_sql( name=table_name, con=engine, index=False, # 不写入行索引 if_exists="append" ) print("数据插入成功!") ``` --- #### **完整代码示例** ```python import pandas as pd from sqlalchemy import create_engine # 读取CSV文件 df = pd.read_csv("data.csv") # 连接MySQL engine = create_engine("mysql+pymysql://root:your_password@localhost/your_database") # 写入数据 df.to_sql("your_table", engine, index=False, if_exists="append") ``` --- ### **关键注意事项** 1. **数据类型匹配**:确保CSV列的数据类型与MySQL表的列定义一致。例如,日期字段需转换为`datetime`类型。 2. **批量插入优化**:若数据量较大,可设置`chunksize`参数分批次插入: ```python df.to_sql(..., chunksize=1000) ``` 3. **异常处理**:添加`try-except`块捕获连接或插入错误: ```python try: df.to_sql(...) except Exception as e: print(f"插入失败: {e}") ``` --- ### **相关问题** 1. 如何处理CSV文件中的缺失值或异常数据? 2. 如何通过Python实现MySQL事务(Transaction)以保证数据一致性? 3. 除了`pandas.to_sql`,还有哪些方法可以将数据写入MySQL? 4. 如何通过索引优化提升大数据插入的性能? --- 如果需要更详细的参数说明(如字段类型映射、连接池配置),可进一步扩展上述步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命的脚步从不停歇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值