python 和R混搭批量将CSV转换为xlsx表格并合并

问题概述:已知某个地区所有站点号,已有全国站点文件信息,需要从全国站点文件中提取相应地区站点的文件信息,并且合并为一个表格;;;

全程通过新必应和chatgpt搜素代码,总的体验,是两个工具可以给思路,但实际操作问题很多,代码并不是可以直接运行,需要修改,可以把错误提示复制到聊天框再询问原因,也可以找到解决办法,还是需要再结合百度,通过博客一些博主的方法解决问题;

1.pythonCSV分隔符文件(不清楚什么编码的情况下)批量转CSV UTF-8分隔符文件

站点数据是CSV分隔符文件,一开始准备在R里面批量读取CSV并将所有信息合并在一个表格里;;;但是R中read.csv和read_csv直接读取文件名都没成功,显示多字节编码识别不出来;然后看到有博主用python完成此工作,此处完全复制粘贴博主代码,可以成功运行:

批量将将xlsx转为csv,将csv转为csv utf-8_批量把xlsx转成csv_Znnjcidmslz的博客-CSDN博客

# 存有文件的路径
os.chdir('E:/seasonyield_predict/datapre/yield/stations/yield_info/')
current_path = os.getcwd()
# current_path = os.path.dirname('G:/weather_output2')
# 转换之后存放的路径为“UTF8”,会检查当前路径是否有,没有就创建
utf8_path = os.path.join(current_path, 'UTF8')
if not os.path.exists(utf8_path):
    os.makedirs(utf8_path)

for file_name in os.listdir(current_path):
    # 转换csv文件
    if file_name.endswith('.csv'):
        df = pd.read_csv(file_name,encoding='GB2312',low_memory=False)##此处原文件编码可以参考下列代码查看
        # df = pd.read_csv(file_name, encoding='gbk', low_memory=False)
        utf8_file_dir = os.path.join(utf8_path, file_name)
        df.to_csv(utf8_file_dir.replace('.csv', '.csv'), encoding='utf-8-sig', index=False)
        print('csv文件"{}"成功转换为csv格式'.format(file_name))

####查看编码类型
import chardet
with open(os.listdir(current_path)[8], 'rb') as f:
    result = chardet.detect(f.read())
print(result['encoding'])

2.R批量CSV转为xlsx并合并为一个表格信息(直接读取CSV也可以工作)

这个过程新必应和chatgpt可以解决问题,不过也需要修改部分代码

library(dplyr)
library(openxlsx)
library(readr)
Phe<-read.xlsx("E:/seasonyield_predict/datapre/yield/stations/phenology_db.xlsx",sheet=1)#东北站点全信息
ID<-unique(Phe$ID)

# 设置工作目录
setwd("E:/seasonyield_predict/datapre/yield/stations/yield_info/UTF8")
# 获取所有csv文件名
csv_files <- list.files(pattern = "*.csv")
# 读取文件名为数字的excel表格信息
file_names <- ID # 假设文件名为1.xlsx, 2.xlsx, 3.xlsx
file_names<-as.character(file_names)
xlxs_files<-list.files(pattern = "*.xlsx")
###循环转换
for (file_name in file_names) {
  matching_file <- grep(file_name, xlxs_files, value = TRUE)
  if(length(matching_file)  != 0){
    a<-read.xlsx(matching_file)
write.xlsx(a,file=paste0("E:/seasonyield_predict/datapre/yield/stations/db_yield/",file_name,'.xlsx'),
               colNames = TRUE)
  }
         
}

###将文件下的所有xlsx表格合为一个表格

setwd("E:/seasonyield_predict/datapre/yield/stations/db_yield")
xlsxfiles <- list.files(pattern = "*.xlsx")
total_db<-c()
for (f in xlsxfiles) {
  a<-read.xlsx(f,sheet=1)
  total_db<-rbind(total_db,a)
}

total_dbb<-total_db[,c(1,2,3,4,20,21)]
total_dbb<-total_dbb[-which(total_dbb$亩实际产量....................1kg<0),]
write.xlsx(total_dbb,file=paste0("E:/seasonyield_predict/datapre/yield/stations/db_yield/",'total_dbb','.xlsx'),
           colNames = TRUE)

作为小白,只是记录一下学习过程,很多问题的解决大部分还是依靠网络搜索工具,然后修修补补改改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值