尝试按行分割一个4G的csv文件

来源:互联网 发布:观察者软件 编辑:程序博客网 时间:2024/06/05 10:30

同事有个4G的csv想另存为xlsx,然后我正好手头没事,就帮她一起想办法。

试了好多方法:

1)先是用ue试着打开,确实打开了,但是不能另存为为xlsx,一直长时间假死。

2)用R读取这个文件,然后另存为xlsx …… 

library(xlsx)setwd("D://test//")dt<-read.csv("WK.csv",header = T)head(dt)write.xlsx(dt,"haha.xlsx")


还是too naive

3)想想先把文件分割吧,从网上抄了段Java代码,改成适合的行数

package mysegfile;import java.io.*;public class SegFile {public static void start(int rows, String sourceFilePath, String targetDirectoryPath) {File sourceFile = new File(sourceFilePath);File targetFile = new File(targetDirectoryPath);if (!sourceFile.exists() || rows <= 0 || sourceFile.isDirectory()) {System.out.println("源文件不存在或者输入了错误的行数");return;}if (targetFile.exists()) {if (!targetFile.isDirectory()) {System.out.println("目标文件夹错误,不是一个文件夹");return;}} else {targetFile.mkdirs();}try {BufferedReader br = new BufferedReader(new FileReader(sourceFile));BufferedWriter bw = null;String str = "";String tempData = br.readLine();int i = 1, s = 0;while (tempData != null) {str += tempData + "\r\n";if (i % rows == 0) {bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath() + "/" + s + "_" + sourceFile.getName())));bw.write(str);bw.close();str = "";s += 1;}i++;tempData = br.readLine();}if ((i - 1) % rows != 0) {bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath() + "/" + s + "_" + sourceFile.getName())));bw.write(str);bw.close();br.close();s += 1;}System.out.println("文件分割结束,共分割成了" + s + "个文件");} catch (Exception e) {}}// 测试public static void main(String args[]) {SegFile.start(50000, "D:/haha2.txt", "d:/aha_output2");}}

感觉很厉害的样子,结果还是小看了4G的文件,运行了好久都没出一个分割文件,挫败。


4)实在不行了,只好转头linux系统 split -l 500000 k.csv xy

唉,虽然暂时解决了问题,但是不能用win 分割还是有点遗憾

原创粉丝点击