(64) 常見文件類型處理: 屬性文件/CSV/EXCEL/HTML/壓縮文件 / 電腦程式的思維邏輯

2021-02-14 老馬說編程

查看歷史文章,請點擊上方連結關注公眾號。

對於處理文件,我們介紹了流的方式,57節介紹了字節流,58節介紹了字符流,同時,也介紹了比較底層的操作文件的方式,60節介紹了隨機讀寫文件,61節介紹了內存映射文件,我們也介紹了對象的序列化/反序列化機制,62節介紹了Java標準的序列化,63節介紹了如何用Jackson處理其他序列化格式如XML/JSON和MessagePack。

在日常編程中,我們還經常會需要處理一些具體類型的文件,如CSV, Excel, HTML,直接使用前面幾節介紹的方式來處理一般是很不方便的,往往有一些第三方的類庫,基於之前介紹的技術,提供了更為方便易用的接口。

本節,我們就來簡要介紹如何利用Java SDK和一些第三方類庫,來處理如下五種類型的文件:

屬性文件:屬性文件是常見的配置文件,用於在不改變代碼的情況下改變程序的行為。

CSV:CSV是Comma-Separated Values的縮寫,表示逗號分割值,是一種非常常見的文件類型,大部分日誌文件都是CSV,CSV也經常用於交換表格類型的數據,待會我們會看到,CSV看上去很簡單但處理的複雜性經常被低估。

Excel:Excel大家都知道,在編程中,經常需要將表格類型的數據導出為Excel格式,以方便用戶查看,也經常需要接受Excel類型的文件作為輸入以批量導入數據。

HTML:所有網頁都是HTML格式,我們經常需要分析HTML網頁,以從中提取感興趣的信息。

壓縮文件:壓縮文件有多種格式,也有很多壓縮工具,大部分情況下,我們可以藉助工具而不需要自己寫程序處理壓縮文件,但某些情況,需要自己編程壓縮文件或解壓縮文件。

屬性文件

屬性文件一般很簡單,一行表示一個屬性,屬性就是鍵值對,鍵和值用等號(=)或冒號(:)分隔,一般用於配置程序的一些參數。比如,在需要連接資料庫的程序中,經常使用配置文件配置資料庫信息,比如,有這麼個文件config.properties,內容大概如下所示:

db.host = 192.168.10.100
db.port : 3306
db.username = zhangsan
db.password = mima1234

處理這種文件使用字符流也是比較容易的,但Java中有一個專門的類java.util.Properties,它的使用也很簡單,有如下主要方法:

public synchronized void load(InputStream inStream)

public String getProperty(String key)

public String getProperty(String key, String defaultValue)

load用於從流中加載屬性,getProperty用於獲取屬性值,可以提供一個默認值,如果沒有找到配置的值,則返回默認值。對於上面的配置文件,可以使用類似下面的代碼進行讀取:

Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));
String host = prop.getProperty("db.host");
int port = Integer.valueOf(prop.getProperty("db.port", "3306"));

使用類Properties處理屬性文件的好處是:

不過,使用Properties也有限制,它不能直接處理中文,在配置文件中,所有非ASCII字符需要使用Unicode編碼,比如,不能在配置文件中直接這麼寫:

name=老馬

"老馬"需要替換為Unicode編碼,如下所示:

name=\u8001\u9A6C

在Java IDE如Eclipse中,如果使用屬性文件編輯器,它會自動替換中文為Unicode編碼,如果使用其他編輯器,可以先寫成中文,然後使用JDK提供的命令native2ascii轉換為Unicode編碼,用法如下例所示:

native2ascii -encoding UTF-8 native.properties ascii.properties

native.properties是輸入,其中包含中文,ascii.properties是輸出,中文替換為了Unicode編碼,-encoding指定輸入文件的編碼,這裡指定為了UTF-8。

CSV文件

CSV是Comma-Separated Values的縮寫,表示逗號分割值,一般而言,一行表示一條記錄,一條記錄包含多個欄位,欄位之間用逗號分隔。不過,一般而言,分隔符不一定是逗號,可能是其他字符如tab符'\t'、冒號':',分號';'等。程序中的各種日誌文件通常是CSV文件,在導入導出表格類型的數據時,CSV也是經常用的一種格式。

CSV格式看上去很簡單,比如,我們在58節保存學生列表時,使用的就是CSV格式,如下所示:

張三,18,80.9
李四,17,67.5

使用之前介紹的字符流,看上去就可以很容易處理CSV文件,按行讀取,對每一行,使用String.split進行分割即可。但其實CSV有一些複雜的地方,最重要的是:

欄位內容中包含分割符怎麼辦?

欄位內容中包含換行符怎麼辦?

對於這些問題,CSV有一個參考標準,RFC-4180,https://tools.ietf.org/html/rfc4180,但實踐中不同程序往往有其他處理方式,所幸的是,處理方式大體類似,大概有兩種處理方式:

使用引用符號比如",在欄位內容兩邊加上",如果內容中包含"本身,則使用兩個"

使用轉義字符,常用的是\,如果內容中包含\,則使用兩個\

比如,如果欄位內容有兩行,內容為:

hello, world \ abc

"老馬"

使用第一種方式,內容會變為:

"hello, world \ abc
""老馬"""

使用第二種方式,內容會變為:

hello\, world \\ abc\n"老馬"

CSV還有其他一些細節,不同程序的處理方式也不一樣,比如:

怎麼表示null值?

空行和欄位之間的空格怎麼處理?

怎麼表示注釋?

由於以上這些複雜問題,使用簡單的字符流就難以處理了。有一個第三方類庫,Apache Commons CSV,對處理CSV提供了良好的支持,它的官網地址是:

http://commons.apache.org/proper/commons-csv/index.html

本節使用其1.4版本,簡要介紹其用法。如果使用Maven管理項目,可引入以下文件中的依賴:

https://github.com/swiftma/program-logic/blob/master/csv_lib/dependencies.xml

如果非Maven,可從下面地址下載依賴庫:

https://github.com/swiftma/program-logic/tree/master/csv_lib

Apache Commons CSV中有一個重要的類CSVFormat,它表示CSV格式,它有很多方法以定義具體的CSV格式,如:

//定義分隔符

public CSVFormat withDelimiter(final char delimiter)

//定義引號符

public CSVFormat withQuote(final char quoteChar)

//定義轉義符

public CSVFormat withEscape(final char escape)
//定義值為null的對象對應的字符串值

public CSVFormat withNullString(final String nullString)

//定義記錄之間的分隔符

public CSVFormat withRecordSeparator(final char recordSeparator)

//定義是否忽略欄位之間的空白

public CSVFormat withIgnoreSurroundingSpaces(final boolean ignoreSurroundingSpaces)

比如,如果CSV格式定義為:使用分號;作為分隔符,"作為引號符,使用N/A表示null對象,忽略欄位之間的空白,CSVFormat可以這樣創建:

CSVFormat format = CSVFormat.newFormat(';')
        .withQuote('"').withNullString("N/A")
        .withIgnoreSurroundingSpaces(true);

除了自定義CSVFormat,CSVFormat類中也定義了一些預定義的格式,如:CSVFormat.DEFAULT, CSVFormat.RFC4180。

CSVFormat有一個方法,可以分析字符流:

public CSVParser parse(final Reader in) throws IOException

返回值類型為CSVParser,它有如下方法獲取記錄信息:

public Iterator<CSVRecord> iterator()

public List<CSVRecord> getRecords() throws IOException

public long getRecordNumber()

CSVRecord表示一條記錄,它有如下方法獲取每個欄位的信息:

//根據欄位列索引獲取值,索引從0開始

public String get(final int i)

//根據列名獲取值

public String get(final String name)

//欄位個數

public int size()

//欄位的迭代器

public Iterator<String> iterator()

分析CSV文件的基本代碼如下所示:

CSVFormat format = CSVFormat.newFormat(';')
        .withQuote('"').withNullString("N/A")
        .withIgnoreSurroundingSpaces(true);
Reader reader = new FileReader("student.csv");
try{
    for(CSVRecord record : format.parse(reader)){
        int fieldNum = record.size();
        for(int i=0; i<fieldNum; i++){
            System.out.print(record.get(i)+" ");
        }
        System.out.println();
    }
}finally{
    reader.close();
}

除了分析CSV文件,Apache Commons CSV也可以寫CSV文件,有一個CSVPrinter,它有很多列印方法,比如:

//輸出一條記錄,參數可變,每個參數是一個欄位值

public void printRecord(final Object... values) throws IOException

//輸出一條記錄

public void printRecord(final Iterable<?> values) throws IOException

看個代碼示例:

CSVPrinter out = new CSVPrinter(new FileWriter("student.csv"),
        CSVFormat.DEFAULT);
out.printRecord("老馬", 18, "看電影,看書,聽音樂");
out.printRecord("小馬", 16, "樂高;賽車;");
out.close();

輸出文件student.csv中的內容為:

"老馬",18,"看電影,看書,聽音樂"
"小馬",16,樂高;賽車;

Excel

Excel主要有兩種格式,後綴名分別為.xls和.xlsx,.xlsx是Office 2007以後的默認擴展名。Java中處理Excel文件及其他微軟文檔廣泛使用POI類庫,其官網是http://poi.apache.org/。

本節使用其3.15版本,簡要介紹其用法。如果使用Maven管理項目,可引入以下文件中的依賴:

https://github.com/swiftma/program-logic/blob/master/excel_lib/dependencies.xml

如果非Maven,可從下面地址下載依賴庫:

https://github.com/swiftma/program-logic/tree/master/excel_lib

使用POI處理Excel文件,有如下主要類:

比如,保存學生列表到student.xls,代碼可以為:

public static void saveAsExcel(List<Student> list) throws IOException {
    Workbook wb = new HSSFWorkbook();
    Sheet sheet = wb.createSheet();
    for (int i = 0; i < list.size(); i++) {
        Student student = list.get(i);
        Row row = sheet.createRow(i);
        row.createCell(0).setCellValue(student.getName());
        row.createCell(1).setCellValue(student.getAge());
        row.createCell(2).setCellValue(student.getScore());
    }
    OutputStream out = new FileOutputStream("student.xls");
    wb.write(out);
    out.close();
    wb.close();
}

如果要保存為.xlsx格式,只需要替換第一行為:

Workbook wb = new XSSFWorkbook();

使用POI也可以方便的解析Excel文件,使用WorkbookFactory的create方法即可,如下所示:

public static List<Student> readAsExcel() throws Exception  {
    Workbook wb = WorkbookFactory.create(new File("student.xls"));
    List<Student> list = new ArrayList<Student>();
    for(Sheet sheet : wb){
        for(Row row : sheet){
            String name = row.getCell(0).getStringCellValue();
            int age = (int)row.getCell(1).getNumericCellValue();
            double score = row.getCell(2).getNumericCellValue();
            list.add(new Student(name, age, score));
        }
    }    
    wb.close();
    return list;
}

以上我們只是介紹了基本用法,如果需要更多信息,如配置單元格的格式、顏色、字體,可參看http://poi.apache.org/spreadsheet/quick-guide.html。

HTML

HTML是網頁的格式,如果不熟悉,可以參看http://www.w3school.com.cn/html/html_intro.asp。在日常工作中,可能需要分析HTML頁面,抽取其中感興趣的信息。有很多HTML分析器,我們簡要介紹一種,jsoup,其官網地址為https://jsoup.org/。

本節使用其1.10.2版本。如果使用Maven管理項目,可引入以下文件中的依賴:

https://github.com/swiftma/program-logic/blob/master/html_lib/dependencies.xml

如果非Maven,可從下面地址下載依賴庫:

https://github.com/swiftma/program-logic/tree/master/html_lib

我們通過一個簡單例子來看jsoup的使用,我們要分析的網頁地址是:

http://www.cnblogs.com/swiftma/p/5631311.html

瀏覽器中看起來的樣子是這樣的(部分截圖):


將網頁保存下來,其HTML代碼看上去是這樣的(部分截圖):


假定我們要抽取網頁主題內容中每篇文章的標題和連結,怎麼實現呢?jsoup支持使用CSS選擇器語法查找元素,如果不了解CSS選擇器,可參看http://www.w3school.com.cn/cssref/css_selectors.asp。

定位文章列表的CSS選擇器可以是

#cnblogs_post_body p a

我們來看代碼(假定文件為articles.html):

Document doc = Jsoup.parse(new File("articles.html"), "UTF-8");
Elements elements = doc.select("#cnblogs_post_body p a");
for(Element e : elements){
    String title = e.text();
    String href = e.attr("href");
    System.out.println(title+", "+href);
}

輸出為(部分):

電腦程式的思維邏輯 (1) - 數據和變量, http://www.cnblogs.com/swiftma/p/5396551.html
電腦程式的思維邏輯 (2) - 賦值, http://www.cnblogs.com/swiftma/p/5399315.html

jsoup也可以直接連接URL進行分析,比如,上面代碼的第一行可以替換為:

String url = "http://www.cnblogs.com/swiftma/p/5631311.html";
Document doc = Jsoup.connect(url).get();

關於jsoup的更多用法,請參看其官網。

壓縮文件

壓縮文件有多種格式,Java SDK支持兩種:gzip和zip,gzip只能壓縮一個文件,而zip文件中可以包含多個文件。下面我們介紹Java SDK中的基本用法,如果需要更多格式,可以考慮Apache Commons Compress:

http://commons.apache.org/proper/commons-compress/

先來看gzip,有兩個主要的類:

java.util.zip.GZIPOutputStream

java.util.zip.GZIPInputStream

它們分別是OutputStream和InputStream的子類,都是裝飾類,GZIPOutputStream加到已有的流上,就可以實現壓縮,而GZIPInputStream加到已有的流上,就可以實現解壓縮。比如,壓縮一個文件的代碼可以為:

public static void gzip(String fileName) throws IOException {
    InputStream in = null;
    String gzipFileName = fileName + ".gz";
    OutputStream out = null;
    try {
        in = new BufferedInputStream(new FileInputStream(fileName));
        out = new GZIPOutputStream(new BufferedOutputStream(
                new FileOutputStream(gzipFileName)));
        copy(in, out);
    } finally {
        if (out != null) {
            out.close();
        }
        if (in != null) {
            in.close();
        }
    }
}

調用的copy方法是我們在57節介紹的。解壓縮文件的代碼可以為:

public static void gunzip(String gzipFileName, String unzipFileName)
        throws IOException {
    InputStream in = null;
    OutputStream out = null;
    try {
        in = new GZIPInputStream(new BufferedInputStream(
                new FileInputStream(gzipFileName)));
        out = new BufferedOutputStream(new FileOutputStream(
                unzipFileName));
        copy(in, out);
    } finally {
        if (out != null) {
            out.close();
        }
        if (in != null) {
            in.close();
        }
    }
}

zip文件支持一個壓縮文件中包含多個文件,Java SDK主要的類是:

java.util.zip.ZipOutputStream

java.util.zip.ZipInputStream

它們也分別是OutputStream和InputStream的子類,也都是裝飾類,但不能像GZIPOutputStream/GZIPInputStream那樣簡單使用。

ZipOutputStream可以寫入多個文件,它有一個重要方法:

public void putNextEntry(ZipEntry e) throws IOException

在寫入每一個文件前,必須要先調用該方法,表示準備寫入一個壓縮條目ZipEntry,每個壓縮條目有個名稱,這個名稱是壓縮文件的相對路徑,如果名稱以字符'/'結尾,表示目錄,它的構造方法是:

public ZipEntry(String name)

我們看一段代碼,壓縮一個文件或一個目錄:

public static void zip(File inFile, File zipFile) throws IOException {
    ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
            new FileOutputStream(zipFile)));
    try {
        if (!inFile.exists()) {
            throw new FileNotFoundException(inFile.getAbsolutePath());
        }
        inFile = inFile.getCanonicalFile();
        String rootPath = inFile.getParent();
        if (!rootPath.endsWith(File.separator)) {
            rootPath += File.separator;
        }
        addFileToZipOut(inFile, out, rootPath);
    } finally {
        out.close();
    }
}

參數inFile表示輸入,可以是普通文件或目錄,zipFile表示輸出,rootPath表示父目錄,用於計算每個文件的相對路徑,主要調用了addFileToZipOut將文件加入到ZipOutputStream中,代碼為:

private static void addFileToZipOut(File file, ZipOutputStream out,
        String rootPath) throws IOException {
    String relativePath = file.getCanonicalPath().substring(
            rootPath.length());
    if (file.isFile()) {
        out.putNextEntry(new ZipEntry(relativePath));
        InputStream in = new BufferedInputStream(new FileInputStream(file));
        try {
            copy(in, out);
        } finally {
            in.close();
        }
    } else {
        out.putNextEntry(new ZipEntry(relativePath + File.separator));
        for (File f : file.listFiles()) {
            addFileToZipOut(f, out, rootPath);
        }
    }
}

它同樣調用了copy方法將文件內容寫入ZipOutputStream,對於目錄,進行遞歸調用。

ZipInputStream用於解壓zip文件,它有一個對應的方法,獲取壓縮條目:

public ZipEntry getNextEntry() throws IOException

如果返回值為null,表示沒有條目了。使用ZipInputStream解壓文件,可以使用類似如下代碼:

public static void unzip(File zipFile, String destDir) throws IOException {
    ZipInputStream zin = new ZipInputStream(new BufferedInputStream(
            new FileInputStream(zipFile)));
    if (!destDir.endsWith(File.separator)) {
        destDir += File.separator;
    }
    try {
        ZipEntry entry = zin.getNextEntry();
        while (entry != null) {
            extractZipEntry(entry, zin, destDir);
            entry = zin.getNextEntry();
        }
    } finally {
        zin.close();
    }
}

調用extractZipEntry處理每個壓縮條目,代碼為:

private static void extractZipEntry(ZipEntry entry, ZipInputStream zin,
        String destDir) throws IOException {
    if (!entry.isDirectory()) {
        File parent = new File(destDir + entry.getName()).getParentFile();
        if (!parent.exists()) {
            parent.mkdirs();
        }
        OutputStream entryOut = new BufferedOutputStream(
                new FileOutputStream(destDir + entry.getName()));
        try {
            copy(zin, entryOut);
        } finally {
            entryOut.close();
        }
    } else {
        new File(destDir + entry.getName()).mkdirs();
    }
}

小結

本節簡要介紹了五種常見文件類型的處理:屬性文件、CSV、EXCEL、HTML和壓縮文件,介紹了基本用法和更多信息的參考連結。

至此,關於文件的所有部分,我們就介紹完了。

從下一節開始,讓我們一起探索並發和線程的世界!

(與其他章節一樣,本節所有代碼位於 https://github.com/swiftma/program-logic)

-- 長文連載,未完待續,敬請關注(長按下圖二維碼,或公眾號搜索"老馬說編程")


用心原創,保留所有版權。

相關焦點

  • CSV是什麼文件 怎麼打開csv文件
    經常使用資料庫軟體的朋友都清楚csv文件是什麼用的,最早是使用在簡單的資料庫裡,由於其格式簡單,並具備很強的開放性,如果使用到csv文件該怎麼打開呢?下面給大家介紹幾種打開csv文件的常用方法。最早出現csv文件是為了實現簡單的數據存儲,是一個純文本的文件,最廣泛的應用是在程序之間轉移表格數據,能夠兼容各類程序,那面對這樣的文件類型該怎麼打開呢,下面一起來學習下csv文件怎麼打開的方法。以下是csv文件怎麼打開的詳細教程:了解什麼是csv文件?
  • 電腦中常見的文件擴展名
    (10)、.rar 壓縮文件(11)、.ppt  演示文稿 (12)、.sys  windows的系統文件(13)、.zip 壓縮文件 (14)、.swf  Flash Player動畫3、怎樣查看文件的擴展名(1)將光標移動到該文件上(2)點擊滑鼠右鍵(3)單擊屬性,這時會彈出屬性對話框舉例:
  • 如何將Excel或csv文件導入R?
    今天介紹如何將excel或csv文件導入進R。在學習了一系列的R語言作圖教程後,想必有些小夥伴都已經躍躍欲試,想要分析自己手頭的數據了。為了示範,先用Excel創建一個xlsx數據:"mydata.xlsx",具體如下圖所示。
  • 一篇文章就能深入理解pandas讀取excel,txt,csv文件等命令
    dtype例子: {『a』: np.float64, 『b』: np.int32} 指定每一列的數據類型,a,b表示列名engine使用的分析引擎。dayfirstDD/MM格式的日期類型iterator返回一個TextFileReader 對象,以便逐塊處理文件。chunksize文件塊的大小compression直接使用磁碟上的壓縮文件。如果使用infer參數,則使用 gzip, bz2, zip或者解壓文件名中以『.gz』, 『.bz2』, 『.zip』, or 『xz』這些為後綴的文件,否則不解壓。
  • 將excel表格或csv轉換為Shapefile文件
    (shapefile.POINT)#shapefile文件要求」幾何數據」與」屬性數據」要有一一對應的關係,如果有」幾何數據」而沒有相應的屬性值存在,那麼在使用ArcGIS軟體打開所創建的shapefile文件時會出錯#為了避免這種情況的發生,可以設置 sf.autoBalance = 1,以確保每創建一個」幾何數據」,該庫會自動創建一個屬性值(空的屬性值)來進行對應。
  • python項目實踐分享:使用pandas處理大型CSV文件
    我們先來看一下其中幾個常見的API:1.reader(csvfile[,dialect='excel'][, fmtparam])主要用於CSV文件的讀取,返回一個 reader對象用於在CSV文件內容上進行行迭代。
  • Excel打開csv文件出現亂碼的解決方法
    CSV文件是一種數據文件,正常情況下,我們可以直接在excel表格中打開CSV文件,不過有時也會出現亂碼,很多人不知道該如何解決。
  • n種方式教你用python讀寫excel等數據文件
    點擊上方「濤哥聊Python」,選擇「星標」公眾號重磅乾貨,第一時間送達來源:Python大數據分析python處理數據文件的途徑有很多種,可以操作的文件類型主要包括文本文件(csv、txt、json等)、excel
  • python 處理 csv 文件
    csv 文件是一種逗號分隔的純文本形式存儲的表格數據,Python內置了CSV模塊,可直接通過該模塊實現csv文件的讀寫操作,在web應用中導出數據是比較常見操作
  • n種方式教你用Python讀寫Excel等數據文件
    內存不夠時使用,一般不太用readlines()   :一次性讀取整個文件內容,並按行返回到list,方便我們遍歷2. 內置模塊csvpython內置了csv模塊用於讀寫csv文件,csv是一種逗號分隔符文件,是數據科學中最常見的數據存儲格式之一。csv模塊能輕鬆完成各種體量數據的讀寫操作,當然大數據量需要代碼層面的優化。
  • Python對CSV文件的處理
    在接口自動化測試中,把測試的數據存儲到csv的文件也是一種很不錯的選擇,下面就詳細的介紹如何實現CSV文件內容的讀取和如何把數據寫入到
  • Python數據分析第一步,如何編輯excel和csv文件,詳細教程
    我用文本編輯器遍寫了一個CSV文件,命名為三國武將表.csv。第一行是表頭,用於描述每一列數據的用處,每一列通過逗號分隔。第二行開始連續定義了三個武將的屬性信息,同樣每一列數據都通過逗號分隔。現在我們可以用Excel或者別的電子表格軟體打開這個CSV文件,看看是它是如何展現數據的。
  • Python文件操作經典案例:CSV文件的讀與寫
    鑑於CSV的應用場景,編程人員與它打交道的機會特別多,所以有必要熟悉其特有的屬性。另外,CSV文件還可以通過Excel打開,所以有必要了解CSV文件獨特性:值沒有類型,所有值都是字符串;不能指定字體顏色等樣式;不能指定單元格的寬高
  • 用Excel打開CSV格式文件亂碼,三種方法可以處理好!
    這款軟體不僅功能齊全,還可以兼容很多的文件格式。這些辦公軟體帶給我們方便,同時日常使用過程中也會出現一些問題。小編今天就有這樣一個問題,有朋友在使用office中的excel電子表格編輯工具來打開csv文件,但是他卻發現在打開的時候文件總是會顯示亂碼的情況,可對於.csv文件格式,excel是支持的,這是為什麼呢?就是這樣一個問題大家有沒有遇到過並解決好了嗎?現在小編就帶給你兩種解決的方法。
  • Python讀寫csv文件專題教程(2)
    Out[8]: id int64id.1 objectage int64dtype: object如果我想修改age列的數據類型為float,read_csv時可以使用dtype調整,如下:In [9]: df = pd.read_csv('test.csv
  • NumPy——數據CSV文件存取和多維數據的存取
    CSV (Comma‐Separated Value, 逗號分隔值) CSV是一種常見的文件格式,用來存儲批量數據2. np.savetxtnp.savetxt(frame, array, fmt='%.18e', delimiter=None)frame: 文件、字符串或產生器
  • 基於Python實現對各種數據文件的操作
    常見的數據文件類型如下:txtcsvexcel(xls\xlsx)在線網頁數據pdf\word其他數據軟體格式1 txt文件更多參考:https://docs.python.org/3/tutorial/inputoutput.html
  • python讀寫csv文件
    文件讀寫的經典操作方式如下,通過內置的open函讀取到每行內容,按照指定的分隔符進行分隔,然後對每一列的內容進行處理。
  • Python讀寫csv文件專題教程(3)
    id.1     objectage       int64label    objectdate     objectdtype: objectdate列此時類型為object,想辦法轉化為時間型:In [8]: df = pd.read_csv('test.csv',sep='\s+',header=0,na_values
  • Python讀寫csv文件專題教程(1)
    1 前言Python的數據分析包Pandas具備讀寫csv文件的功能,read_csv 實現讀入csv文件,to_csv寫入到csv文件。