日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理解CSV格式规范(解析CSV必备)

發(fā)布時間:2023/12/29 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解CSV格式规范(解析CSV必备) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

    • 什么是CSV
    • CSV的格式規(guī)范
    • 關(guān)于CSV文件解析

參考于CSV in Wikipedia
參考于RFC 4180
參考于CSV Reader

什么是CSV

逗號分隔值(Comma-Separated Values,CSV),其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本),文件的每一行都是一個數(shù)據(jù)記錄。每個記錄由一個或多個字段組成,用逗號分隔。使用逗號作為字段分隔符是此文件格式的名稱的來源,因?yàn)榉指糇址部梢圆皇嵌禾?#xff0c;有時也稱為字符分隔值。

CSV廣泛用于不同體系結(jié)構(gòu)的應(yīng)用程序之間交換數(shù)據(jù)表格信息,解決不兼容數(shù)據(jù)格式的互通問題,一般按照傳輸雙方既定標(biāo)準(zhǔn)進(jìn)行格式定義,而其本身并無明確格式標(biāo)準(zhǔn)。

CSV用逗號分隔字段的基本思想是清楚的,但是當(dāng)字段數(shù)據(jù)也可能包含逗號或者甚至嵌入換行符時,該想法變得復(fù)雜。 CSV實(shí)現(xiàn)可能無法處理這些字段數(shù)據(jù),或者可能會使用引號來包圍字段。引用并不能解決所有問題:有些字段可能需要嵌入引號,因此CSV實(shí)現(xiàn)可能包含轉(zhuǎn)義字符或轉(zhuǎn)義序列。

RFC 4180提出了MIME類型(”text/csv”)對于CSV格式的標(biāo)準(zhǔn),可以作為一般使用的常用定義,滿足大多數(shù)實(shí)現(xiàn)似乎遵循的格式。

CSV的格式規(guī)范

下面的格式規(guī)范定義來源于RFC 4180,附上原文供參考,一共也就七點(diǎn)。

1. 每一行記錄位于一個單獨(dú)的行上,用回車換行符CRLF(也就是\r\n)分割。

Each record is located on a separate line, delimited by a line break (CRLF). For example:

aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF

2. 文件中的最后一行記錄可以有結(jié)尾回車換行符,也可以沒有。

The last record in the file may or may not have an ending line break. For example:

aaa,bbb,ccc CRLF zzz,yyy,xxx

3. 第一行可以存在一個可選的標(biāo)題頭,格式和普通記錄行的格式一樣。標(biāo)題頭要包含文件記錄字段對應(yīng)的名稱,應(yīng)該有和記錄字段一樣的數(shù)量。(在MIME類型中,標(biāo)題頭行的存在與否可以通過MIME type中的可選”header”參數(shù)指明)

There maybe an optional header line appearing as the first line of the file with the same format as normal record lines. This header will contain names corresponding to the fields in the file and should contain the same number of fields as the records in the rest of the file (the presence or absence of the header line should be indicated via the optional “header” parameter of this MIME type). For example:

field_name,field_name,field_name CRLF aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF

4. 在標(biāo)題頭行和普通行每行記錄中,會存在一個或多個由半角逗號(,)分隔的字段。整個文件中每行應(yīng)包含相同數(shù)量的字段,空格也是字段的一部分,不應(yīng)被忽略。每一行記錄最后一個字段后不能跟逗號。(通常用逗號分隔,也有其他字符分隔的CSV,需事先約定)

Within the header and each record, there may be one or more fields, separated by commas. Each line should contain the same number of fields throughout the file. Spaces are considered part of a field and should not be ignored. The last field in the record must not be followed by a comma. For example:

aaa,bbb,ccc

5. 每個字段可用也可不用半角雙引號(“)括起來(不過有些程序,如Microsoft的Excel就根本不用雙引號)。如果字段沒有用引號括起來,那么該字段內(nèi)部不能出現(xiàn)雙引號字符。

Each field may or may not be enclosed in double quotes (however some programs, such as Microsoft Excel, do not use double quotes at all). If fields are not enclosed with double quotes, then double quotes may not appear inside the fields. For example:

"aaa","bbb","ccc" CRLF zzz,yyy,xxx

6. 字段中若包含回車換行符、雙引號或者逗號,該字段需要用雙引號括起來。

Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes. For example:(下面原文的例子可能有些問題)

"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx

7. 如果用雙引號括字段,那么出現(xiàn)在字段內(nèi)的雙引號前必須加一個雙引號進(jìn)行轉(zhuǎn)義。

If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote. For example:

"aaa","b""bb","ccc"

關(guān)于CSV文件解析

上面說過,CSV并不是一種單一的、定義明確的格式(盡管RFC 4180有一個被通常使用的定義)。因此在實(shí)踐中,術(shù)語“CSV”泛指具有以下特征的任何文件:

  • 純文本,使用某個字符集,比如ASCII、Unicode、EBCDIC或GB2312;
  • 由記錄組成(典型的是每行一條記錄);
  • 每條記錄被分隔符分隔為字段(典型分隔符有逗號、分號或制表符;有時分隔符可以包括可選的空格);
  • 每條記錄都有同樣的字段序列。

所以,在常規(guī)的約束條件下,存在著許多CSV變體,故CSV文件并不完全互通,如使用約定好的其他分隔符、轉(zhuǎn)義規(guī)則等。因此,實(shí)際使用CSV需要數(shù)據(jù)交換雙方約定規(guī)則(其實(shí)大體思路不變,一些細(xì)節(jié)),在進(jìn)行CSV文件讀寫就免不了進(jìn)行文件的解析。

正如CSV并不明確的格式,CSV文件的解析同樣沒有標(biāo)準(zhǔn)方法,一般可以自己實(shí)現(xiàn)讀寫,網(wǎng)上也有很多種不同語言的實(shí)現(xiàn)版本。例如opencsv、csvreader等。它們可能會與RFC中的規(guī)定有所出入,例如在csvreader中有要求:

前綴和后綴的空格字符,逗號和制表符,與逗號或記錄分隔符相鄰的內(nèi)容將被修剪。
為了保證前導(dǎo)和后綴空白字符的保留,必須通過將字段嵌入到雙引號集合中來限定字段。

使用時需要注意。

總結(jié)

以上是生活随笔為你收集整理的理解CSV格式规范(解析CSV必备)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。