求教:我用R从网上下下来一批csv文件,我有两个问题: 1.怎样批量将这些文件的编码形式转为utf8的格式?因为我想把这批文件导入mysql,只有转成utf8才能成功导入。 2.怎样利用Rmysql在mysql中创建一批和这些csv文件同名的表格?

0
已邀请:
0

贝克汉姆 - 高级数据仓库工程师,拥有丰富的数据治理实践经验 2017-03-29 回答

试试这个:csvdata <- read.csv("hisdata.csv",header=TRUE,encoding="UTF-8")



 
0

engikeer 2017-05-12 回答

使用 read.csv() 函数读入csv文件时,可以通过fileEncoding参数指定源文件的编码,通过encoding参数指定保存数据的对象的编码。所以,可以将任何编码的文件保存为UTF-8编码。如源文件为GBK编码时,代码如下
temp <- read.csv(csv_file, stringsAsFactors = FALSE, 
fileEncoding = "GBK", encoding = "UTF-8")


 
要将整个数据框保存为数据库中的表,使用DBI包的dbWriteTable()可以一步完成,而不需要解析数据框的结构和构造SQL语句。要将上面的temp保存为同名表,代码如下
library(DBI)
conn <- dbConnect(RMySQL::MySQL(), host="127.0.0.1",
port=3306, dbname="d_name", username="u_name", password="pwd")
dbWriteTable(conn, "temp", temp)

所以,批量将cvs文件保存到数据库的完整代码为:
# 将cvs文件所在目录设置为工作目录
setwd("/.../files")

# 连接到数据库
library(DBI)
conn <- dbConnect(RMySQL::MySQL(), host="127.0.0.1",
port=3306, dbname="d_name", username="u_name", password="pwd")
# 确保数据库以utf8编码保存数据表
dbSendQuery(conn, "SET NAMES utf8")

# 将数据写入数据库
file_list <- list.files(".")
for (csv_file in file_list) {
temp <- read.csv(csv_file, stringsAsFactors = FALSE,
fileEncoding = "GBK", encoding = "UTF-8")
dbWriteTable(conn, unlist(strsplit(csv_file, "[.]"))[1], temp)
}

# 断开数据库连接
dbDisconnect(conn)

要回复问题请先登录注册