NCCSV -
ANetCDF- 兼容的 ASCII CSV 檔案规格, 1.10版本
鮑勃·西蒙斯和史蒂夫·漢金 "NCCSV"由鮑勃·西蒙斯和史蒂夫·漢金授權依據創用CC授權使用
引言
此文件指定了 ASCII CSV 文字檔案格式, 可以包含所有資訊 (中繼資料與資料) 可以在NetCDF .nc包含類似 CSV 文件的資料表格的檔案。 ASCII CSV 文字檔案的延伸檔名必須是 . csv , 才能輕易地正确讀取到 Excel 和 Google 工作表 等电子表 格程序 。 Bob Simons會寫入軟體, 將 NCCSV 檔案轉換成NetCDF-3 (也可能是NetCDF-4) .nc檔案,反之亦然。 鮑勃·西蒙斯修改了ERDDAP™以支援讀取與寫入此檔案。
NCCSV格式的設計使得Excel和Google Sheets等电子表格軟體可以將NCCSV檔案匯入為csv檔案,所有資訊都在电子表格的儲存格中可以進行編輯. 或者, 可以在 NCCSV 常规之後從零開始建立工作表 。 不管电子表格的來源如何, 如果它被匯出為 . csv 檔案, 它會符合 NCCSV 的规格, 不會丟失任何資訊 。 NCCSV 檔案和遵循這些約定的相似的电子表格檔的唯一不同是:
- NCCSV 檔案在以逗號分隔的行上有值 。 電子表格在相邻单元格的行上有值 。
- NCCSV 檔案中的字串常被雙引號包圍 。 工作表中的字串從來不用雙引號包圍 。
- 內部雙引號 (") 在 NCCSV 檔案中的字串中, 以 2 雙引號顯示 。 內部雙引數在电子表格中以 1 雙引數出現 。
看电子表格更多信息。
可流性
和一般的 CSV 文件一樣, NCCSV 文件是可流的 。 因此,如果NCSV是由數據伺服器如:ERDDAP™,伺服器可以在所有資料被收集之前開始將資料流到要求者。 這是有益和可取的特征。NetCDF相形之下,檔案不能流動 。
ERDDAP™
此规格的設計使 NCCSV 文件與.nc可以從它們中產 生的檔案可以用ERDDAP™資料伺服器 (通過Nccsv 檔案中的 IDD 表格和NcFiles 的 EDD 表格數據集類型) ,但此规格是外部的ERDDAP.ERDDAP™有一些需要的全局屬性以及很多建議的全局和變數屬性,大多以 CF 和 ACDD 屬性為基礎(參見 /docs/server-admin/datasets# 全球屬性).
平衡
NCCSV格式的設計平衡了几种要求:
- 文件必須包含表格中的所有資料和中繼資料NetCDF檔案,包括特定的資料類型。
- 檔案必須能被讀入並從工作表中寫出, 且不失去資訊 。
- 檔案必須方便人類建立、編輯、讀取和理解。
- 檔案必須能用電腦程式清晰解析 。
如果此文件的某些要求似乎奇怪或挑剔,可能需要满足其中之一。
其他规格
這項规格是指它所設計的另外几项规格和文庫, 但這項规格並非其他规格的一部分, 若在此未指定與其中一個標準相關的細節, 請參考相關的說明 。 主要是:
- 數據集探索的屬性常规 (ACDD) 元数据標準 : https://wiki.esipfed.org/Attribute\_Convention\_for\_Data\_Discovery\_1-3 .
- 气候与預測 (CF) 元数据標準 : https://cfconventions.org/Data/cf-conventions/cf-conventions-1.8/cf-conventions.html .
- 其NetCDF使用者指南 (努格) : https:///docs.unidata.ucar.edu/netcdf-java/current/userguide/index.html .
- 其NetCDF軟體文庫類型NetCDF- 賈瓦和NetCDF-c: https://www.unidata.ucar.edu/software/netcdf/ . 這些文庫無法讀取 NCCSV 檔案, 但可以讀取.nc從 NCCSV 檔案建立檔案 。
- 杰森: https://www.json.org/
标记
括弧\[ \],表示可選項。
文件结构
完整的 NCCSV 檔案包含兩個區段: 元数据區段, 其後是數據區段 。
NCCSV 檔案必須只包含 7 位 ASCII 字元 。 因此,用于寫入和讀取檔案的字符集或編碼可能是任何與7位 ASCII 字符集兼容的字符集或編碼,例如ISO-8859-1.ERDDAP™使用 ISO- 8859-1 字元集讀寫 NCCSV 檔案 。
NCCSV 檔案可能使用新線 (\n) (在 Linux 和 Mac OS X 電腦上常见的) 或馬車 返回加新線 (\r\n) (在 Windows 電腦上常用的) 作為線末的標記,但不是兩者兼有。
.nccsv中繼資料
當創作人和讀者都期待它時, 也有可能, 有時會有用, (包括\*安德曼達塔\*行) . 結果可以完整描述檔案的屬性、變數名稱和數據類型,因此和.das加.dds的回應具有相同的目的。OPeNDAP伺服器。ERDDAP™如果您要求檔案, 會傳回此變更 類型=.nccsv從 a 中繼資料ERDDAP™數據集。
元数据科
在 NCCSV 檔案中, 元数据段的每行都使用格式
變數 姓名,屬性 姓名,值1\[值2\]\[值 3\]\[值 4\]\[...\]
項目之前或之後的空間不被允許, 因為它們在將檔案匯入电子表格程式時會造成問題 。
公约
NCCSV 文件的第一行是元数据段的第一行,必須有\全球\例如: \全球\"公约"COARDS,CF-1.6, ACDD-1.3, NCCSV-1.1 ” 其中之一必須是NCCSV-1.1,
末端(_M)
NCCSV 檔案的元数据區段的尾端必須用只有一行表示 \安德曼達塔\
建議但不要求指定變數的所有屬性都出現在元件區域的相邻線上 。 如果 NCCSV 文件被轉換成NetCDF檔案中,變數名稱最早出现在元件區域的顺序是NetCDF文件。
選取的空白行可以在元数据區 域中, 在需要的第一行之后與\全球\ 公约信息 (见下文) 在要求的最后一行之前\安德曼達塔\.
如果從 NCCSV 檔案建立电子表格, 元数据段會以變數名稱出現在 A 列, 屬性名稱出現在 B 列, 值出現在 C 列 。
如果這些傳統之後的电子表格被儲存為 CSV 檔案, 在元数据區域的行尾會經常有额外的逗號 。 將 NCCSV 檔案轉換成.nc檔案會忽略额外的逗號 。
變數 姓名
變數 姓名 是數據檔中變數的大小寫名稱。 所有可變名稱必須從 7 位 ASCII 字母或下划線開始, 由 7 位 ASCII 字母、 下划線和 7 位 ASCII 數字組成 。
全球
特殊變數Name\全球\用于表示全局元数据。
屬性 姓名
屬性 姓名 是與變數或\全球\. 所有屬性名稱必須從 7 位 ASCII 字母或下划線開始, 由 7 位 ASCII 字母、 下划線 和 7 位 ASCII 數字組成 。
星座
特殊屬性 姓名\*星座\*可以用來建立 scalar 資料變數并定義其值。 數據型態\*星座\*定義變數的資料類型, 所以不要指定\*数据类型\*刻度變數的屬性。 注意 NCCSV 檔的資料區中必須有 scalar 變數的資料 。
例如, 要建立一個命名為"船" 的 scalar 變數, 其值為「 Okeanos Explorer 」 , 以及 cf\_role 屬性, 使用 : 船,\*星座\*奧基亞諾斯探險家 船,cf\role, 傳射\ 當刻度數據變數被讀入ERDDAP™中,平面值會轉換成每行數值相同的資料表中的列。
值
值 是中繼屬性的數值, 必須是一個數目, 其中一個或多個字節、 ubyte、 短、 ushort、 int、 uint、 uint、 長、 ulong、 浮、 雙倍、 字符串或 char 。 不支援其他資料類型 。 沒有值的屬性會被忽略 。 如果有不止一個子數值,子數值都必須是同樣的資料類型,並用逗號分隔,例如: sst,actual\_range0.17f,23.58f 如果有多重字符串值, 請使用一個字符串\n (新行) 字符分隔子串。
屬性數據類型的定義有:
位元組
- 位元屬性值 (8 位, 簽署) 必須用后缀'b'來寫,例如 -7b, 0b, 7b 。 有效的位元數範圍為 -128 到 127 。 看起來像位元組但無效的數字 (例如,128b) 將轉換成缺失值或產生錯誤訊息。
u字節
- ubyte 屬性值 (8 位, 未簽署) 必須用後缀「 ub」 寫, 例如 0ub, 7ub, 250ub 。 有效的位元數範圍為 0 到 255 。 看起來像 ubyte 的數字不合法 (例如,256ub) 將轉換成缺失值或產生錯誤訊息。 可能時使用字節而 不是ubyte, 因為很多系統不支援未簽署的字節 (例如,NetCDF- 3 文件) .
短
- 短屬性值 (16 位, 簽署) 必須用後缀's'來寫, 例如 - 3000s, 0s, 3000s 。 有效短數值的範圍為 -32768 到 32767. 看起來很短但無效的數字 (例如,32768s) 將轉換成缺失值或產生錯誤訊息。
超速
- ushort 屬性值 (16 位, 未簽署) 必須用後缀「 us 」 寫成, 例如 0us, 30000us, 60000us 。 有效短數值的範圍為 0 到 65535 。 看起來像用戶的數字不合法 (例如,65536us) 將轉換成缺失值或產生錯誤訊息。 可能時, 使用簡短的字節來代替 ushort, 因為很多系統不支援未簽署的字節 (例如,NetCDF- 3 文件) .
英寸
- 英特屬性值 (32 位, 簽署) 必須以 JSON ints 寫入, 沒有小數點或 expresent , 但有後缀 'i' , 例如 -12067978i, 0i, 12067978i 。 有效的內值為 -2147483648 至 2147483647。 看起來像 int 的數字不合法 (例如,2147483648i) 將轉換成缺失值或產生錯誤訊息。
昆特
- uint 屬性值 (32 位, 未簽署) 必須寫成 JSON ints 沒有小數點 或 expresent, 但有後缀 'ui', 例如 0ui, 12067978ui, 4123456789ui 。 有效的 int 值的範圍為 0 到 4294967295 。 看起來像 uint 的數字不合法 (例 如,2147483648ui) 將轉換成缺失值或產生錯誤訊息。 可能時使用 int 而不是 uint , 因為很多系統不支援未簽署的字節 (例如,NetCDF- 3 文件) .
長
- 長屬性值 (64 位, 簽署, 目前由 NUG 支援ERDDAP™CF 尚未支援) 必須不使用小數點寫入,並使用后缀“ L”,例如: -12345678987654321L, 0L, 12345678987654321L。 如果您使用轉換軟體將有長數值的 NCSV 文件轉換成NetCDF-3 檔案, 任何長數值都會轉換成雙數值 。 有效長值的範圍是 -922337203685475808 至 92237203685475807. 看起來很長但無效的數字 (例如,922337203685475808L) 將轉換成缺失值或產生錯誤訊息。 如果可能的話, 使用雙倍而不是烏龍, 因為很多系統不會支持很久 (例如,NetCDF- 3 文件) .
烏龍
- ulong 屬性值 (64 位, 未簽署, 目前由 NUG 和ERDDAP™CF 尚未支援) 必須用小數點寫入, 并加上後缀 'uL', 例如 0uL, 12345678987654321uL, 9007199254740992uL 。 如果您使用轉換軟體將有長數值的 NCSV 文件轉換成NetCDF-3 檔案, 任何長數值都會轉換成雙數值 。 有效長值的範圍為0至1844644073709551615. 一個看起來像烏龍但無效的數字 (例如,184467437095516uL) 將轉換成缺失值或產生錯誤訊息。 可能時, 使用雙倍而不是烏龍, 因為很多系統不支援簽署或未簽署長時間 (例如,NetCDF- 3 文件) .
浮
- 浮點數值 (32 位元) 必須用后缀'f'來寫,可能會有小數點和/或引數,例如 0f, 1f, 12.34f, 1e12f, 1.23e+12f, 1.23e12f, 1.87E-7f。 用 NaNf 表示浮動的 NaN (缺少) 值。 浮力範圍约为+/-3.40282347E+38f (~7 重要的小數位數) . 看起來像浮點數但無效的數字 (例如,1.0e39f) 將轉換成缺失值或產生錯誤訊息。
雙倍
- 雙倍屬性值 (64 位元) 必須用后缀'd'來寫,可能會有小數點和(或)引數,例如 0d, 1d, 12.34d, 1e12d, 1.23e+12d, 1.23e12d, 1.87E-7d。 用 NaNd 做雙份 NaN (缺少) 值。 雙胞胎的範圍约为+/-1.79769313486231570E+308d (~15 位小數) . 看起來是雙倍但無效的數字 (例如,1.0e309d) 將轉換成缺失值或產生錯誤訊息。
字符串
- 字符串屬性值是 UCS-2 字符序列 (例如, 2字节的Unicode 字符, 如Java) ,它必須被寫成 7 位 ASCII, JSON 類的字符串才能指定非 ASCII 字元 。
- 雙引號 (") 必須編碼為兩個雙引號 ("") . 电子表格程式在讀取 .csv 檔案時需要這個 這就是电子表格程式在儲存电子表格為.csv檔案時所寫的.
- 特殊 JSON 反斜編碼的字元必須像 JSON 一樣編碼( 特别是)\n(新行),但也有(背斜),\f(格式),\ t(tab),\r(返回)或与\u 啊 語法。 在工作表中,不要使用 Alt Enter 在文字格內指定新行;而是使用\n (2 個字元:反斜和n ' ') 表示新行。
uhhhh
- \u hhhh - 所有字符都小于32或大 于字符 #126, 而不是其他編碼, 必須用語法\u編碼 hhh*, 其中hhh是字符的四位數十六進位數字, 例如歐洲標籤是\u20AC 。 參考 https://en.wikipedia.org/wiki/Unicode 查找與特定 Unicode 字元相關的十六進制數字, 或者使用軟體文庫 。
- 如果字串在起始或末端有空格,或包括 " (雙引號) 或 逗號,或包含會被解釋成其他資料類型的數值 (例如,) , 或者是「 null 」 一词, 整個字串必須用雙引號來包圍; 否則, 和 JSON 不同的是, 附加的雙引號是可選擇的 。 我們建議:當懷疑的時候,你應當把整條弦帶入兩句。 字串起始或末端的空格很不方便 。
- 目前, NCCSV支持他們.ERDDAP™在內部支援他們。 一些輸出檔案類型支援它們 (例如,.json和.nccsv) . 但很多輸出檔案型態不支援它們. 例如,NetCDF-3份文件不支持此字元, 因為NetCDF檔案使用 1字节字元, CF 目前沒有指定 Unicode 字元如何編碼的系統NetCDF字串 (例如UTF-8) . 這可能會隨時改善
字符
- 字元屬性值是單一個 UCS-2 字元 (例如, 2字节的Unicode 字符, 如Java) ,它必須被寫成 7 位 ASCII, JSON 類型的字符才能指定其他字符 (參觀上面對特殊字元編碼的字串定義, 加上單句編碼為\ ' ') . 字元屬性值必須用單引號封存 (內部引言) 雙倍引號 (外部引文) ,例如:"'a',"''" (雙引號字元) ,"''" (單一引號字符) ,"'\" (分頁) ,"'\u20AC'" (a 歐元字元) . 使用單引數和雙引數的系統是奇特而繁琐的, 但是它是用工作表格來区分字符串和字符串的方法 。 看起來像字元 但無效的值會產生錯誤訊息 。 和 Strings 一樣,目前不鼓励使用大于 # 255 的字符 。
后缀
注意, 在 NCCSV 檔案的屬性區域中, 所有數字屬性值必須有後缀字母 (例如,“b”) 以表示數據型態 (例如,字节) . 但在 NCCSV 檔案的資料區域中,數值絕對不能有這些後缀字母 (除長整數的 L 和 ulong 整數的 UL 外) ─數據型態由\*数据类型\*變數的屬性。
数据(_T)
每個非- 的資料型態斜拉變數必須用\*数据类型\*屬性可以有字节,ubyte,短, ushort, int, uint, uint, 長, ulong, 浮, 雙倍, 字符串, 或 char (大小寫不敏感) . 例如, qc\_flag,\*数据类型\*字节 警告:指定正确\*数据类型\*這是你的責任 指定錯誤的資料類型 (例如, 當您應該指定浮點數時) 不會產生錯誤訊息, 可能會造成資訊流失 (例如,浮點數值將四舍五入為整數) NCCSV 檔案讀取時ERDDAP™或轉換成 aNetCDF文件。
已忽略字符
使用 char 資料值被阻擋, 因為在其他檔案類型中並沒有被廣泛支持 。 字元值可能以單字元或字串寫入資料區域 (特別的是,如果你需要寫一個特殊的字元) . 如果找到字串, 字串的第一個字元將被用作字串的值 。 0 長弦與缺失值將轉換為字元\ uFFFF 。 注意:NetCDF檔案只支援單位字元字元字元, 所以比字元 # 255 更大的字元會在寫入時轉 換成「 ? 」NetCDF文件。 除非使用 charset 屬性指定 char 變數的不同的 charset, 否则會使用 ISO- 8859-1 字元集 。
長且未署名
雖然有很多檔案類型 (例如,NetCDF-4和Json) 和ERDDAP™支援長且未簽署 (烏比特 烏比特 烏比特) 值,目前不鼓励在 NCCSV 檔案中使用長和未簽署的值, 因為目前沒有 Excel、 CF 和NetCDF-3份文件。 如果您要在 NCSV 檔案中指定長或未簽署的值 (或相应的 Excel 电子表格) ,您必須使用“L”的後缀,以便 Excel 不以更低的精度把數字當做浮點數。 目前, NCCSV 檔案被轉換成NetCDF-3.nc檔案、 長數值和烏龍數值會轉換成雙數值, 造成非常大數值的精度損失 (長小於 -2^53, 或長於 2^53 和 烏龍) . 在NetCDF-3.nc檔案、 ubyte、 ushort 和 uint 變數以字節、 短節和 QQUnsign= true medata 屬性顯示 。 在NetCDF-3.nc檔案、 ubyte、 ushort 和 uint 屬性以字节、 短和 int 字元顯示, 包含相對的 2 的補充值 (例如, 255ub 是 - 1b) . 這顯然是個麻煩, 所以只要可能, 簽署的資料型態就應該使用, 而不是未簽署的資料型態 。
CF、 ACDD 和ERDDAP™中繼資料
大部分NCCSV檔案或.nc從它們產生的檔案, 會被讀入ERDDAP, 強烈建議 NCCSV 檔案包含需要或建議的元数据屬性ERDDAP™(看 /docs/server-admin/datasets# 全球屬性). 屬性幾乎都來自 CF 和 ACDD 中繼資料標準, 並且能正确描述 數據集 (誰,什麼,當,在哪裡,為什麼,如何) 給一個對數據集一無所知的人 尤其重要的是,几乎所有數值變數都應有單位屬性,且UDUNITS- 相容值,例如, sst單位,分數
加入不來自 CF 或 ACDD 標準或 ACDD 的附加屬性是好的ERDDAP.
資料科
结构
數據區域的第一行必須有對大小寫敏感、逗號分隔的變數名稱清單 。 此清單中的所有變數必須在元数据區段描述,反之亦然 (除\全球\屬性和\星座\變數) .
第二行通過數據區域的倒數第二行必須有逗號分隔的數值列表 。 每列資料的數值必須與逗號分隔的變數列表相同 。 數值之前或之後的空間不被允許, 因為它們在匯入檔案到电子表格程式時會產生問題 。 本部分的每欄必須只包含數值\*数据类型\*按\*数据类型\*此變數的屬性 。 和屬性區域不同的是,資料區域的數值不能有後缀字母表示資料類型 。 和屬性區域不同的是, 資料區域的 char 值可能會忽略附帶的單引數, 如果這些引數不為混淆所需要的話 (因此, 必須引用 '、' 和 '\' 。) . NCCSV 檔案中可能有這些資料列的數量, 但目前ERDDAP™只能讀取 NCCSV 檔案, 最多可達20億列 。 總而言之, 建議您將大數據集分拆成多個 NCCSV 資料檔, 每檔不到 100 萬列 。