我有数据库中的数据,想要将其导出为CSV文件。这些数据是用日语编写的,为了进一步使用,我需要将其编码为UTF-8。
以下是我的脚本,用于获取数据并将其写入CSV文件。
我可以创建CSV文件,并且数据以UTF-8导出,但是我的CSV文件的数据是这样的:
在我的研究中,我发现我的数据是以字节对象的形式编写的(也许我在这里错了)。我需要将数据写成UTF-8格式,而不是 b'' 。
我知道我可以使用
你能给我一些建议吗?
以下是我的脚本,用于获取数据并将其写入CSV文件。
import mysql.connector
from mysql.connector import errorcode
import sys
import csv
query = 'SELECT * FROM `images-data`'
try:
cnx = mysql.connector.connect(user='root', password='1234',
host='127.0.0.1',
database='sotsuken-test-db')
cur=cnx.cursor()
cur.execute(query)
result=cur.fetchall()
c = csv.writer(open("db-data.csv","w"))
for row in result:
c.writerow(row)
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
cnx.close()
我可以创建CSV文件,并且数据以UTF-8导出,但是我的CSV文件的数据是这样的:
1,b'\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88\xe3\x81\xa7\xe3\x81\x94\xe3\x81\x8a\xe3\x81\x96\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x99'
在我的研究中,我发现我的数据是以字节对象的形式编写的(也许我在这里错了)。我需要将数据写成UTF-8格式,而不是 b'' 。
我知道我可以使用
decode("UTF-8")
将其转换为字符串,但我无法将其应用于csv.writerow
。你能给我一些建议吗?
DictWriter
在解决这个问题上比writer
更好在哪里?当然,如果你知道你的列是什么,它对于其他原因可能更好,但这并不改变其中一些列是bytes
的事实。 - abarnertfetchall
。你可以只是迭代for row in cur:
,游标应该会一次给你一行数据,缓冲尽可能多的行数据到内存中,以最高效的方式进行读取,而不管它们的数量。此外,通常不关闭已经打开用于写入的文件是一个坏主意,无论是使用close()
调用还是with
语句。 - abarnert