asc2. txt - một tệp có dòng tiêu đề, theo sau là 2 cột dữ liệu số nguyên và dấu phẩy động. [ví dụ]
asc3. txt - một tệp có nhiều cột dữ liệu số nguyên, số float và chuỗi. [ví dụ]
asc4. txt - một tệp chứa dân số của các thành phố, với một số dòng đầu trang và chân trang và hỗn hợp dữ liệu số. Các tiêu đề chứa một số số và một số dữ liệu số chứa dấu phẩy. Các cột được ngăn cách bởi các tab. [ví dụ]
asc5. txt - một tệp trong đó hàng đầu tiên chứa tên của từng trường được phân tách bằng dấu phân cách và phần còn lại của tệp chứa các giá trị của từng trường được phân tách bằng cùng một dấu phân cách. [ví dụ]
chuỗi1. txt - tệp chứa các dòng thơ [không có dữ liệu số]. [ví dụ]
pw. dat - một tệp có tiêu đề và bốn cột dữ liệu số và không phải số được xếp hàng. Cột "ID" không phải là số, nhưng nó chứa các số như một phần của tên ID. [ví dụ]
asc6. txt - một tệp có tiêu đề và ba cột dữ liệu dấu chấm động [lat, lon, temp]. [ví dụ]
stn_latlon. dat - một tệp có 980 hàng và 10 cột dữ liệu dấu phẩy động. [ví dụ]
istasyontablosu_son. txt - hỗn hợp dữ liệu số và không phải số trong các cột không được sắp xếp đẹp mắt. [ví dụ]
cygnss_test. txt - một tệp có số lượng tiêu đề không xác định bắt đầu bằng "%", theo sau là một số duy nhất chứa số lượng hàng, theo sau là nhiều hàng dữ liệu với 9 cột mỗi hàng. [ví dụ]
L3_aiavg_n7t_197901. txt - một tệp có sự kết hợp của văn bản, số nguyên và số float và không có dấu phân cách. [ví dụ]
NCDC. Miền Trung_Iowa. 1895-2016. txt - một tệp có sự kết hợp của văn bản, số nguyên và số float và không có dấu phân cách. Tệp này đã được tải xuống từ Trung tâm Thông tin Môi trường Quốc gia [NCEI], trước đây được gọi là Trung tâm Dữ liệu Khí hậu Quốc gia [NCDC]. Cụ thể, tệp này được tải xuống thông qua công cụ chọn phân chia dữ liệu Khí hậu. [ví dụ]
đọc nhiều tệp ASCII vào một biến NCL
asc1. txt - một tệp có 14 số nguyên, mỗi số một dòng.
; Read data into a one-dimensional int array of length 14: data = asciiread["asc1.txt",14,"integer"] npts = dimsizes[data] ; should be 14 print[data] ; Print the valuesNếu bạn không biết mình có bao nhiêu giá trị dữ liệu, bạn có thể sử dụng giá trị "-1" đặc biệt cho kích thước thứ nguyên. Khi bạn sử dụng -1, các giá trị dữ liệu sẽ được đọc từ trái sang phải, từ trên xuống dưới, thành một mảng 1D, cho đến khi không còn giá trị nào.
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 14
chuỗi1. txt - một tệp không có dữ liệu số, chỉ có các dòng từ một bài thơ
Sử dụng lại giá trị -1 đặc biệt và loại "chuỗi" để đọc trong mỗi dòng. Khi bạn đọc chuỗi, mỗi dòng trong tệp sẽ được coi là một chuỗi, bất kể dòng đó có chứa khoảng trắng, tab hay bất kỳ loại khoảng trắng nào khác không
; Read poem into a one-dimensional string array of unknown length: filename = "string1.txt" poem = asciiread[filename,-1,"string"] nlines = dimsizes[poem] print["The poem in '" + filename + "' has " + nlines + " lines."] print["This includes the title and the author."] print[poem] ; Print the lines
asc2. txt - một tệp có dòng tiêu đề, theo sau là 2 cột dữ liệu số nguyên và dấu phẩy động
Mặc dù tệp này chứa nhiều cột dữ liệu, khi bạn sử dụng giá trị "-1" đặc biệt làm kích thước thứ nguyên, các giá trị sẽ được đọc thành một mảng một chiều. Các giá trị sẽ được đọc từ trên xuống dưới, trái sang phải
Trong tệp này, dòng tiêu đề sẽ bị bỏ qua vì nó không chứa bất kỳ dữ liệu số nào
data = asciiread["asc2.txt",-1,"float"] print[data] ; Print the valuesĐể đọc dữ liệu này thành mảng 2D có kích thước 17 x 2 [17 hàng x 2 cột], hãy sử dụng.
data = asciiread["asc2.txt",[/17,2/],"float"] print[data] ; Print the values
stn_latlon. dat - một tệp có 980 hàng và 10 cột dữ liệu dấu phẩy động
Hai phương pháp đầu tiên cho biết cách đọc tệp này nếu bạn biết chính xác số lượng hàng và cột và phương pháp thứ ba cho biết cách đọc tệp này nếu bạn không biết
Phương pháp 1
; Read data into a 980 x 10 float array. nrows = 980 ncols = 10 data = asciiread["stn_latlon.dat",[/nrows,ncols/],"float"] printVarSummary[data] ; Print information about file only. ; Two ways to print the data. print[data] ; Print data, one value per line write_matrix[data,ncols + "f7.2",0] ; Formatted outputPhương pháp 2
Tệp này thực chất là một tệp chứa các giá trị vĩ độ và kinh độ, mỗi giá trị có kích thước 70 x 70. Các giá trị vĩ độ được ghi đầu tiên trên tệp, tiếp theo là các giá trị kinh độ. Với thông tin này, đây là một cách khác để đọc trong tệp này
nlat = 70 nlon = 70 latlon2d = asciiread["stn_latlon.dat",[/2,nlat,nlon/],"float"] ; 2 x 70 x 70 lat2d = latlon2d[0,:,:] ; 70 x 70 lon2d = latlon2d[1,:,:] ; 70 x 70
Phương pháp 3
Sử dụng các hàm đóng góp đặc biệt numAsciiCol và hàm readAsciiTable để tính toán số lượng cột trước tiên, sau đó đọc dữ liệu vào một mảng có kích thước nrows x ncols
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" ; This library is automatically loaded ; from NCL V6.2.0 onward. ; No need for user to explicitly load. filename = "stn_latlon.dat" ; Calculate the number of columns. ncols = numAsciiCol[filename] ; Given the # of columns, we can use readAsciiTable to read this file. data = readAsciiTable[filename,ncols,"float",0] nrows = dimsizes[data[:,0]] ; calculate # of rows print["'" + filename + "' has " + nrows + " rows and " + ncols + \ " columns of data."]
pw. dat - một tệp có dòng tiêu đề và bốn cột dữ liệu số và không phải số được xếp hàng. Cột "ID" không phải là số, nhưng nó chứa các số như một phần của tên ID
Chúng ta cần phân tích cột đầu tiên này để các giá trị số này không bị trộn lẫn với dữ liệu thực của chúng ta
Lưu ý rằng kể từ phiên bản 5. 1. 1, loại việc này sẽ dễ dàng hơn nhiều khi sử dụng hàm str_get_field, mà chúng tôi sẽ chứng minh trước
Phương pháp mới, phiên bản 5. 1. 1 trở lên
________số 8Phương pháp cũ, trước phiên bản 5. 1. 1 Ví dụ sau sẽ chỉ hoạt động nếu các cột của bạn được sắp xếp đẹp mắt
; Read data into a big 1D string array, and convert to a character array. data = asciiread["./pw.dat", -1, "string"] cdata = stringtochar[data] ; ; The first row is just a header, so we can discard this. ; The data starts in the second row, which is represented ; by index 1. ; ; The latitude values fall in columns 6-12 [indices 7:13] ; The longitude values fall in columns 13-21 [indices 14:22] ; The pwv data values fall in columns 22-31 [indices 23:end] ; ; The "1:,"means start with the second row, and include all ; values to the end. ; lat = stringtofloat[charactertostring[cdata[1:,7:13]]] lon = stringtofloat[charactertostring[cdata[1:,14:22]]] pwv = stringtofloat[charactertostring[cdata[1:,23:]]]Tệp này cũng có thể được đọc bằng cách sử dụng kết hợp chức năng NCL systemfunc và lệnh "cut" của Unix. Tuy nhiên, một lần nữa, dữ liệu phải được sắp xếp độc đáo. Với "cut", ký tự đầu tiên được coi là cột 1 [chứ không phải 0]
Một phương pháp cũ khác, trước phiên bản 5. 1. 1
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 140
istasyontablosu_son. txt - hỗn hợp dữ liệu số và không phải số trong các cột không được sắp xếp đẹp mắt
Tệp này khá dễ đọc vì các cột không phải là số không có sự kết hợp giữa ký tự chữ và số. Đây là tập lệnh để đọc các cột thứ nhất, thứ năm và thứ sáu [vĩ độ, kinh độ và số trạm] thành các biến riêng biệt
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 141
Kể từ phiên bản 5. 1. 1, bạn có thể đọc các trường từ tệp này bằng cách sử dụng str_get_field
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 142
cygnss_test. txt - một tệp có số lượng tiêu đề không xác định bắt đầu bằng "%", theo sau là một số duy nhất chứa số lượng hàng, theo sau là nhiều hàng dữ liệu với 9 cột mỗi hàng
Phiên bản gốc của tệp có hơn một triệu dòng dữ liệu và một số khối tiêu đề và dữ liệu. Tệp mẫu này chỉ có một khối tiêu đề và dữ liệu. Kịch bản dưới đây sẽ xử lý một trong hai. Để xem một ví dụ vẽ biểu đồ dữ liệu này, hãy xem ví dụ #17 trên trang nguyên thủy
Khi đọc các khối dữ liệu lớn được định dạng đẹp mắt thành các hàng và cột, tốt nhất nên sử dụng str_split_csv, thay vì phân tích cú pháp từng dòng một bằng str_split hoặc str_get_field. str_split_csv yêu cầu mỗi cột được phân tách bằng một dấu phân cách ký tự đơn, vì vậy str_sub_str được sử dụng để thay thế nhiều khoảng trắng chỉ bằng một khoảng trắng
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 143
L3_aiavg_n7t_197901. txt - một tệp có sự kết hợp của văn bản, số nguyên và số float và không có dấu phân cách
Tập tin này [ftp. // tom. gsfc. nasa. gov/pub/nimbus7/] đến từ thiết bị Nimbus-7/TOMS ra mắt vào tháng 10 năm 1978. Để biết thêm thông tin, hãy xem 1README. txt trong cùng thư mục
Đây là một tệp phức tạp để đọc do thiếu cấu trúc và dấu phân cách. Cần kết hợp các vòng lặp "do" và str_get_cols để phân tích dữ liệu
L3_read. ncl đọc tất cả các giá trị và tùy chọn ghi chúng vào NetCDF và/hoặc tạo một biểu đồ đường viền
asc4. txt - một tệp có một số dòng đầu trang và chân trang và hỗn hợp dữ liệu số. Các tiêu đề chứa một số số và một số dữ liệu số chứa dấu phẩy. Các cột được ngăn cách bởi các tab
Xem điều gì sẽ xảy ra khi bạn đọc dữ liệu này bằng asciiread và giá trị -1 đặc biệt
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 144Lưu ý rằng số "15" trong tiêu đề trở thành giá trị dữ liệu đầu tiên được đọc trong. Số "2008" từ "tháng 10 năm 2008" trở thành giá trị thứ hai, v.v. Ngoài ra, hãy chú ý điều gì sẽ xảy ra với các giá trị có dấu phẩy, chẳng hạn như "1,321". Điều này trở thành hai số riêng biệt, "1" và "321"
Trong phiên bản 5. 1. 1, chúng tôi đã thêm một bộ hàm chuỗi giúp đọc tệp này dễ dàng hơn nhiều. Bạn có thể sử dụng str_sub_str để thay thế dấu phẩy bằng một chuỗi trống và str_get_field để đọc các trường mong muốn, sử dụng a làm dấu phân cách
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 145
Trước V5. 1. 1, nó không tầm thường để đọc tập tin này. Trước tiên, bạn phải xóa dấu phẩy, viết tệp dữ liệu mới và sau đó bạn có thể đọc dữ liệu này dễ dàng bằng asciiread. Tải xuống read_asc4. ncl để biết ví dụ về cách thực hiện việc này
asc5. txt - một tệp dữ liệu trong đó hàng đầu tiên chứa tên của từng trường được phân tách bằng dấu phân cách và phần còn lại của tệp chứa các giá trị của từng trường được phân tách bằng cùng một dấu phân cách
Tải xuống ascii_delim. tập lệnh ncl để đọc trong "asc5. txt" và ghi nó ra tệp netCDF, sử dụng tên trường làm tên biến trên tệp netCDF
Kịch bản khá dài; . Ngoài ra, có một chút kiểm tra liên quan để cho phép nhiều loại được đọc trong
Để ghi các trường vào tệp netCDF, tên trường [biến] netCDF không được chứa bất kỳ tab hoặc khoảng trắng nào. Do đó, tập lệnh này sẽ xóa khoảng trắng ở đầu và cuối của bất kỳ tên trường nào và chuyển đổi khoảng trắng khác thành dấu gạch dưới ['_']. Bản thân các giá trị chuỗi hoặc ký tự cho các trường không được sửa đổi
Ghi chú. nói chung không nên đọc các tệp ASCII phức tạp bằng NCL, nhưng ví dụ này cho thấy rằng nó có thể được thực hiện
Nếu bạn muốn sử dụng tập lệnh này cho mục đích riêng của mình, bạn sẽ cần sửa đổi tập lệnh để cho biết 1] tên tệp ASCII đầu vào, 2] số lượng trường, 3] dấu phân cách, 4] loại của từng trường và
Để sửa đổi tập lệnh này cho tệp dữ liệu của riêng bạn, trước tiên hãy tìm kiếm các dòng
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 146Các dòng bạn cần sửa đổi ngay sau đây.
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 147Thay đổi "var_types" thành bất kỳ loại trường nào của bạn và "var_msg" thành giá trị bị thiếu phải là [một chuỗi trống cho biết không có giá trị bị thiếu]
Đoạn mã trên đang mặc định tất cả các loại biến thành "số nguyên", sau đó thay đổi trường thứ 2 và thứ 3 thành loại "float" và trường thứ năm thành loại "ký tự" [trong trường hợp này đang được sử dụng làm mảng ký tự]. Trường duy nhất chứa giá trị bị thiếu là trường thứ tư
Các loại biến được phép là "số nguyên", "float", "kép", "chuỗi" hoặc "ký tự". Lưu ý rằng nếu bạn đọc một biến dưới dạng một chuỗi, nó sẽ không được ghi vào tệp netCDF vì chỉ các mảng ký tự mới có thể được ghi vào tệp netCDF
asc6. txt - một tệp dữ liệu có tiêu đề và ba cột dữ liệu dấu chấm động [lat, lon, temp]
Dữ liệu nhiệt độ trên tệp này có kích thước nlat x nlon [89 x 240] và có giá trị lat,lon cho mỗi giá trị dữ liệu. Dữ liệu vĩ độ và vĩ độ trên tệp này lặp lại. Nghĩa là, đối với mỗi giá trị vĩ độ nlat [89], bạn có cùng giá trị kinh độ nlon [240]. Do đó, bạn có 2130 hàng dữ liệu, nhưng các giá trị vĩ độ và vĩ độ được lặp lại
Tải xuống read_asc6. ncl để biết ví dụ về cách đọc tệp này, loại bỏ dữ liệu lặp lại và tạo một biến "temp2D" với các mảng tọa độ kinh độ và vĩ độ một chiều
Đây là một cái nhìn nhanh về một phần của mã đọc trong dữ liệu
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 148
Cách đọc nhiều file ASCII thành 1 biến trong NCL. Ví dụ này giả định rằng các tệp chứa cùng số cột nhưng không nhất thiết phải có cùng số hàng.
; Read data into a one-dimensional array of unknown length: data = asciiread["asc1.txt",-1,"integer"] npts = dimsizes[data] ; should be 149
Cách đọc tệp ASCII rất lớn [hàng nghìn dòng] chứa dữ liệu số có chứa các dòng đầu trang và/hoặc chân trang
Lý tưởng nhất là bạn sẽ sử dụng readAsciiTable để đọc dữ liệu, loại bỏ các dòng đầu trang và/hoặc chân trang không mong muốn. Tuy nhiên, chức năng này có thể rất chậm, vì nó phải đọc dữ liệu dưới dạng một chuỗi các chuỗi [có thể nhiều lần] để phân tích cú pháp chính xác
Cách nhanh nhất để đọc dữ liệu số là sử dụng asciiread. Vì hàm này đọc từng giá trị trong một tệp, điều này có nghĩa là bất kỳ số nào trong dòng đầu trang hoặc chân trang của bạn sẽ được đọc dưới dạng giá trị thực