最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python讀寫csv并將csv數(shù)據(jù)寫入數(shù)據(jù)庫

 更新時間:2024年11月08日 09:20:33   作者:仙草哥哥  
CSV,也即Comma-Separated?Values,是一種用于存儲表格數(shù)據(jù)的純文本文件格式,本文主要介紹了如何使用python讀寫csv并將csv數(shù)據(jù)寫入數(shù)據(jù)庫,感興趣的可以了解下

csv文件

csv介紹

CSV,也即Comma-Separated Values,是一種用于存儲表格數(shù)據(jù)的純文本文件格式,其中每一行代表一條記錄,記錄中的各個字段由逗號分隔。

姓名,年齡,性別
張三,25,男
李四,28,男
王五,22,男
六六,29,女
子柒,28,女

 對于這樣一個純文本記錄,打開以后可能顯示就像這樣:

姓名年齡性別
張三25
李四28
王五23
六六36
子柒34

切勿自行讀寫csv

很多人會想,既然csv文件不過就是逗號分隔的純文本而已,那么,通過循環(huán)和split分隔不就好了嗎?

csv_text = """姓名,年齡,性別
張三,25,男
李四,28,男
王五,22,男
六六,29,女
子柒,28,女"""
 
 
for line in csv_text.split("\n")[1::]:
    item = line.split(",")
    print("姓名:", item[0])
    print("年齡:", item[1])
    print("性別:", item[2])
    print()

這樣做看起來行之有效,而且也非常簡單,容易理解,但是,不要這樣做。因?yàn)?,在一些情況下,這樣會引入錯誤。例如,當(dāng)某個項(xiàng)中有逗號的時候,如一個人的名字叫做xu,kun,按照正確的csv文件格式,會寫為"xu,kun",并且是符合要求的選項(xiàng)。但是如果使用簡單的split分隔,這個名字也會被拆分開來,從而導(dǎo)致項(xiàng)變多,產(chǎn)生錯誤。

csv讀寫

讀取csv

在python中存在內(nèi)置的csv庫,因此,使用內(nèi)置的csv庫:

import csv
 
with open("my_file.csv") as f:
    csv_reader = csv.reader(f, delimiter=",")
    for row in csv_reader:
        print(row)

寫入csv

import csv
 
with open("my_file.csv", "w", newline="") as f:
    csv_writer = csv.writer(f, delimiter=",")
    csv_writer.writerow(['姓名', '年齡', '性別'])
    csv_writer.writerow(['張三', '25', '男'])
    csv_writer.writerow(['李四', '28', '男'])
    csv_writer.writerow(['王五', '22', '男'])
    csv_writer.writerow(['六六', '29', '女'])
    csv_writer.writerow(['子柒', '28', '女'])

pandas讀寫csv

讀取csv

如果只是為了讀寫csv,那么直接使用內(nèi)置的csv庫即可。但是,如果為了讓pandas使用csv,那么,可以通過pandas直接讀寫。

import pandas as pd
 
csv_data = pd.read_csv("my_file.csv")
print(csv_data)

寫入csv

如果是DataFrame的類型,那么使用:

import pandas as pd
 
# 如果csv_data已經(jīng)是DataFrame
csv_data.to_csv("my_file.csv", index=False)

如果是通過列表寫入,那么使用:

import pandas as pd
 
data_list = [
    ['姓名', '年齡', '性別'],
    ['張三', '25', '男'],
    ['李四', '28', '男'],
    ['王五', '22', '男'],
    ['六六', '29', '女'],
    ['子柒', '28', '女']
]
 
csv_data = pd.DataFrame(data_list[1::], columns=data_list[0])
csv_data.to_csv("my_file.csv", index=False)

csv與數(shù)據(jù)庫

從csv讀取數(shù)據(jù)添加到mysql

添加數(shù)據(jù)本身并不困難,問題在于怎么樣自動創(chuàng)建數(shù)據(jù)表。由于自動選擇數(shù)據(jù)類型可能不能選擇到最適合的類型,因此最好還是應(yīng)該自行創(chuàng)建數(shù)據(jù)表,然后再進(jìn)行數(shù)據(jù)的插入。

import pandas as pd
import pymysql
import os
import re
 
 
try:
    conn = pymysql.connect(
        host="數(shù)據(jù)庫地址",
        user="用戶名",
        password="密碼",
        database="數(shù)據(jù)庫名"
    )
    cursor = conn.cursor()
    print("數(shù)據(jù)庫連接成功!")
except pymysql.MySQLError as e:
    print(f"數(shù)據(jù)庫連接失?。簕e}")
    raise
 
 
csv_file_path = "my_csv.csv"
df = pd.read_csv(csv_file_path)
df = df.where(pd.notnull(df), None)
 
 
table_name = re.sub(r'\W|^(?=\d)', '_', os.path.splitext(os.path.basename(csv_file_path))[0])
 
 
def create_table(cursor, table_name, df):
    columns = df.columns
    types = df.dtypes
    sql = f"CREATE TABLE IF NOT EXISTS `{table_name}` (id INT AUTO_INCREMENT PRIMARY KEY, "
    for col, dtype in zip(columns, types):
        if "int" in str(dtype):
            sql += f"`{col}` INT, "
        elif "float" in str(dtype):
            sql += f"`{col}` FLOAT, "
        elif "datetime" in str(dtype):
            sql += f"`{col}` DATETIME, "
        else:
            max_length = df[col].astype(str).map(len).max()
            sql += f"`{col}` VARCHAR({max_length}), "
    sql = sql.rstrip(", ") + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
    try:
        cursor.execute(sql)
        print(f"表 `{table_name}` 創(chuàng)建成功!")
    except pymysql.MySQLError as e:
        print(f"創(chuàng)建表時出錯:{e}")
        cursor.close()
        conn.close()
        raise
 
create_table(cursor, table_name, df)
 
 
def insert_data(cursor, table_name, df):
    cols = "`,`".join([str(i) for i in df.columns.tolist()])
    placeholders = ','.join(['%s'] * len(df.columns))
    sql = f"INSERT INTO `{table_name}` (`{cols}`) VALUES ({placeholders})"
    data = df.values.tolist()
    try:
        cursor.executemany(sql, data)
        conn.commit()
        print(f"數(shù)據(jù)成功插入到表 `{table_name}` 中!")
    except pymysql.MySQLError as e:
        conn.rollback()
        print(f"插入數(shù)據(jù)時出錯:{e}")
        cursor.close()
        conn.close()
        raise
 
insert_data(cursor, table_name, df)
 
 
cursor.close()
conn.close()

添加完成以后,即可在mysql數(shù)據(jù)庫中查詢到所有結(jié)果。

從mysql中讀取數(shù)據(jù)寫入csv

import pymysql
import csv
 
 
source_conn = pymysql.connect(
    host="源數(shù)據(jù)庫地址",
    user="用戶名",
    password="密碼",
    database="源數(shù)據(jù)庫名"
)
source_cursor = source_conn.cursor()
 
source_cursor.execute("SHOW TABLES")
tables = source_cursor.fetchall()
 
for table in tables:
    table_name = table[0]
    source_cursor.execute(f"SELECT * FROM {table_name}")
    rows = source_cursor.fetchall()
 
    columns = [desc[0] for desc in source_cursor.description]
 
    with open(f"{table_name}.csv", "w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerow(columns)
        writer.writerows(rows) 
 
source_cursor.close()
source_conn.close()

到此這篇關(guān)于python讀寫csv并將csv數(shù)據(jù)寫入數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)python讀寫csv內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python編寫電話薄實(shí)現(xiàn)增刪改查功能

    Python編寫電話薄實(shí)現(xiàn)增刪改查功能

    這篇文章主要為大家詳細(xì)介紹了Python編寫電話薄實(shí)現(xiàn)增刪改查功能的相關(guān)資料,感興趣的朋友可以參考一下
    2016-05-05
  • python中的字符串占位符的"{0:2}"

    python中的字符串占位符的"{0:2}"

    這篇文章主要介紹了python中的字符串占位符的"{0:2}",具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python抽象基類用法實(shí)例分析

    python抽象基類用法實(shí)例分析

    這篇文章主要介紹了python抽象基類用法,實(shí)例分析了Python抽象基類的使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2015-06-06
  • Python讀取大量Excel文件并跨文件批量計算平均值的方法

    Python讀取大量Excel文件并跨文件批量計算平均值的方法

    這篇文章主要介紹了Python讀取大量Excel文件并跨文件批量計算平均值,介紹基于Python語言,實(shí)現(xiàn)對多個不同Excel文件進(jìn)行數(shù)據(jù)讀取與平均值計算的方法,需要的朋友可以參考下
    2023-02-02
  • python中with語句結(jié)合上下文管理器操作詳解

    python中with語句結(jié)合上下文管理器操作詳解

    這篇文章主要給大家介紹了關(guān)于python中with語句結(jié)合上下文管理器操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python使用Openpyxl操作Excel文件的實(shí)現(xiàn)

    python使用Openpyxl操作Excel文件的實(shí)現(xiàn)

    openpyxl 是一個用于在 Python 中讀取和寫入 Excel 文件的優(yōu)秀庫,本文主要介紹了python使用Openpyxl操作Excel文件的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • python數(shù)字圖像處理之對比度與亮度調(diào)整示例

    python數(shù)字圖像處理之對比度與亮度調(diào)整示例

    這篇文章主要為大家介紹了python數(shù)字圖像處理之對比度與亮度調(diào)整示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 對python當(dāng)中不在本路徑的py文件的引用詳解

    對python當(dāng)中不在本路徑的py文件的引用詳解

    今天小編就為大家分享一篇對python當(dāng)中不在本路徑的py文件的引用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python實(shí)現(xiàn)可下載音樂的音樂播放器

    python實(shí)現(xiàn)可下載音樂的音樂播放器

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)可下載音樂的音樂播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 詳解SQLAlchemy框架使用手冊

    詳解SQLAlchemy框架使用手冊

    SQLAlchemy是一個靈活且功能強(qiáng)大的ORM框架,它可以讓Python開發(fā)者輕松地管理數(shù)據(jù)庫,本文主要介紹了SQLAlchemy框架使用手冊,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論

永新县| 连江县| 东乡县| 吴江市| 德安县| 和林格尔县| 青浦区| 毕节市| 仪征市| 微博| 普宁市| 木里| 龙井市| 体育| 綦江县| 东乡族自治县| 醴陵市| 黔东| 汾阳市| 安平县| 万安县| 明溪县| 新野县| 师宗县| 长宁县| 光山县| 望谟县| 湘潭县| 连云港市| 渝中区| 大姚县| 通江县| 沂南县| 库伦旗| 宜兰市| 夏河县| 丽水市| 大荔县| 若羌县| 涟水县| 武陟县|