openCSV讀寫CSV檔案
openCSV是一款簡單的用於解析CSV檔案的java類庫,它封裝了CSV格式檔案的讀寫操作,可將檔案與java物件進行自動對映,自定義分隔符,使用轉義符等。
在使用時有幾點需要注意下:
1、 生成的csv檔案用EXCEL開啟時,總是產生亂碼,但是用NOTEPAD++開啟時,顯示正常。這是因為匯出的檔案是UTF-8不含BOM格式編碼的,為了要讓EXCEL正確的顯示,需要手動的給將要輸出的內容加上BOM標識。
2、 可通過@ CsvBindByName和@
CsvBindByPosition來CSV檔案欄位與物件屬性進行對映。@ CsvBindByName是根據表頭的名稱來對映;@
3、 在讀CSV檔案時需要注意BOM字元,因為在寫檔案時為了能在Excel裡開啟增加了UTF-8 BOM標識,讀檔案時第一列會讀不出來。這種情況的解決方法是使用apache commons io提供的BOMInputStream。
程式碼示例如下
public class Person { private String name; private int age; private int sex; private String phone; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String toString() { return ":"+name + ";" + age + ";" + sex + ";" + phone + ";" + address; } }
public class WriteCSV { public void writeCSV2(List<Person> dataList, String finalPath) { try { Writer writer = new FileWriter(finalPath); // 手動加上BOM標識 writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF })); // 設定顯示的順序 String[] columnMapping = { "name", "age", "sex", "phone", "address" }; ColumnPositionMappingStrategy<Person> mapper = new ColumnPositionMappingStrategy<Person>(); mapper.setType(Person.class); mapper.setColumnMapping(columnMapping); // 寫表頭 CSVWriter csvWriter = new CSVWriter(writer, CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER); String[] header = { "姓名", "年齡", "性別", "手機", "住址" }; csvWriter.writeNext(header); StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer) .withMappingStrategy(mapper) .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER) .withSeparator(CSVWriter.DEFAULT_SEPARATOR) .withEscapechar('\\').build(); beanToCsv.write(dataList); csvWriter.close(); writer.close(); } catch (IOException e) { e.printStackTrace(); } catch (CsvDataTypeMismatchException e) { e.printStackTrace(); } catch (CsvRequiredFieldEmptyException e) { e.printStackTrace(); } System.out.println(finalPath + "資料匯出成功"); } public void readCSV2(String finalPath) { try { // 使用BOMInputStream自動去除UTF-8中的BOM Reader reader = new InputStreamReader(new BOMInputStream( new FileInputStream(finalPath)), "utf-8"); CSVReader csvReader = new CSVReader(reader, CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER); // 列名的對映 HeaderColumnNameTranslateMappingStrategy<Person> strategy = new HeaderColumnNameTranslateMappingStrategy<Person>(); strategy.setType(Person.class); Map<String, String> columnMapping = new HashMap<String, String>(); columnMapping.put("姓名", "name"); columnMapping.put("年齡", "age"); columnMapping.put("性別", "sex"); columnMapping.put("手機", "phone"); columnMapping.put("住址", "address"); strategy.setColumnMapping(columnMapping); CsvToBean<Person> csvToBean = new CsvToBean<Person>(); List<Person> list = csvToBean.parse(strategy, csvReader); for (Person p : list) { System.out.println(p.toString()); } csvReader.close(); reader.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { List<Person> dataList = new ArrayList<Person>(); Person person1 = new Person(); person1.setName("張三"); person1.setSex(1); person1.setAge(55); person1.setPhone("13911111111"); person1.setAddress("北京海淀區"); dataList.add(person1); Person person2 = new Person(); person2.setName("小美"); person2.setSex(0); person2.setAge(20); person2.setPhone("13911112222"); person2.setAddress("北京西城區"); dataList.add(person2); Person person3 = new Person(); person3.setName("小明"); person3.setSex(1); person3.setAge(25); person3.setPhone("13933333333"); person3.setAddress("北京海淀區"); dataList.add(person3); WriteCSV writer = new WriteCSV(); String finalPath2 = "D:/bbb.csv"; writer.writeCSV2(dataList, finalPath2); writer.readCSV2(finalPath2); } }
相關推薦
openCSV讀寫CSV檔案
openCSV是一款簡單的用於解析CSV檔案的java類庫,它封裝了CSV格式檔案的讀寫操作,可將檔案與java物件進行自動對映,自定義分隔符,使用轉義符等。 在使用時有幾點需要注意下: 1、 生成的csv檔案用EXCEL開啟時,
STL 使用ofstream + ifstream 讀寫csv檔案
csv檔案,每行的資料是用逗號分隔的,讀寫csv檔案的示例程式碼如下: #include "stdafx.h" #include <iostream> #include <string> #include <vector> #include <fst
python讀寫csv檔案方法總結
python提供了大量的庫,可以非常方便的進行各種操作,現在把python中實現讀寫csv檔案的方法使用程式的方式呈現出來。 1、使用csv讀寫csv檔案方法總結 reader()函式是一個閱讀器把閱讀的CSV檔案每一行以一個列表表示出來以至於你可以用for迴圈來遍歷他 讀檔案的時候,開啟檔
Python讀寫.csv檔案
# encoding: UTF-8 import csv # 讀取csv檔案 stocks_list = [] #方式一 # file = open(u'../Output.csv', u"r") # data = csv.reader(file) # 返回的是迭代型別 #方式二 with
支援各種特殊字元的 CSV 解析類 (.net 實現)(C#讀寫CSV檔案)
CSV是一種十分簡潔的資料結構,在DOTNET平臺實際使用中發現微軟官方並沒有提供預設的方法,而網上好多例子發現實現並不嚴謹甚至一些含有明顯錯誤,所以後面自己實現了一個讀寫工具類,這裡發出來希望方便後面朋友(難免還是會有考慮不到的地方,可隨時郵件聯絡) 使用該工具可對csv檔案進行讀寫(甚至不用去了解CSV的
python按鈕讀寫csv檔案
from Tkinter import * import cv2 import matplotlib.pyplot as plt import matplotlib.image as mpimg import os import shutil import csv file
(java筆記)java讀寫CSV檔案的方法
CSV檔案 逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其檔案以純文字形式儲存表格資料(數字和文字)。純文字意味著該檔案是一個字元序列,不含必須像二進位制數字那樣被解讀的資料。CSV檔案由任意數目的記錄組成,記
【C++】讀寫CSV檔案
新建CSV檔案:建txt——另存(UTF-8)——字尾.csv CSVparser.hpp #ifndef _CSVPARSER_HPP_ # define _CSVPARSER_HPP_ # include <stdexcept>
spark讀寫csv檔案
如果是spark1.6.0請新增maven: <dependency> <groupId>com.databricks</groupId> <artifactId>s
pySpark讀寫CSV檔案、查重並寫入CSV檔案中
前段時間在研究 pySpark 資料處理,深刻地感受到spark的極大魅力。自己是一個初學者,這篇部落格也只是簡單的完成了幾個簡單的工作任務,哈哈@@不說了上程式碼:from pyspark import SparkConf,SparkContext import csv
java讀寫CSV檔案的兩種方法
BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "GBK")) ;// 附加 上述程式碼片段作用: 轉碼 逗號分隔值(Com
python資料儲存系列教程——python(pandas)讀寫csv檔案
全棧工程師開發手冊 (作者:欒鵬) CSV檔案的規範 1、使用回車換行(兩個字元)作為行分隔符,最後一行資料可以沒有這兩個字元。 2、標題行是否需要,要雙方顯示約定 3、每行記錄的欄位數要相同,使用逗號分隔。逗號是預設使用的值
python 讀寫csv檔案
1. 將DataFrame資料寫入csv (1)用 csv包一行一行的寫入 import csv #python2可以用file替代open with open("test.csv","w") as csvfile: writer =
Python讀寫csv檔案的幾種方法 及 pandas.read_csv引數全解
''' Python讀寫csv檔案 逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號), 其檔案以純文字形式儲存表格資料(數字和文字)。 純文字意味著該檔案是一個字元序列,不含必須像二進位制數字那樣被解讀的資
讀寫csv檔案 可選擇部分列進行操作 按列來統計 並形成字典
用pandas讀取部分列,可以參考第一部分程式碼。 #!/usr/bin/env python # -*- coding: UTF-8 -*- ''' 此程式將原始資料中無關的列給去掉了,只保留時間、ID、等列,另外pandas還在第一列添加了索引列 ''' import
「Python」python讀寫csv檔案並增加行列
# -*- coding: utf-8 -*- """ Created on Thu Aug 17 11:28:17 2017 @author: Shawn Yuen """ import csv
使用 Python 讀寫 csv 檔案
非關係型資料庫中,以文件型的資料庫 MongoDB 最為著名。還有一個很好的全文檢索引擎 Elasticsearch,基本上也可以當做一個文件型的資料庫來使用。 建立 csv 檔案: import csv with open("./csv_tutot
Python3讀寫csv檔案
新手做機器學習,很多東西都得一點一點積累,第一步從讀寫csv資料檔案開始,檔案中包含列名。 1、讀入csv檔案 import csv with open("filename.csv","r",encoding="utf-8") as csvfile:
pandas學習之concat合併及讀寫CSV檔案
讀取CSV檔案 讀取中文的CSV檔案中有中文,用“UTF-8”會出現亂碼問題,解決: import pandas as pd import numpy as np data=pd.read_csv('C:/Users/elenawang/Desktop/
使用python讀寫CSV檔案的三種方法
Python讀寫csv檔案 覺得有用的話,歡迎一起討論相互學習~Follow Me 前言 逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為