Python đọc từng dòng tệp ASCII

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 values
Nế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 output
Phươ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ố 8

Phươ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 14
0

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 14
1

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 14
2

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 14
3

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 14
4Lư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 14
5

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 14
6Cá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 14
7Thay đổ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 14
8

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 14
9

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

Phương pháp nào được sử dụng để đọc từng dòng tệp trong Python?

Tệp Python readline[] . Bạn cũng có thể chỉ định bao nhiêu byte từ dòng để trả về, bằng cách sử dụng tham số kích thước.

Phương pháp nào được sử dụng để đọc từng dòng tệp *?

Bạn có thể sử dụng phương thức readLine[] từ java. io. BufferedReader để đọc từng dòng tệp thành Chuỗi. Phương thức này trả về null khi đến cuối tệp.

Làm cách nào để phân tích một tệp trong Python?

Phân tích cú pháp văn bản ở định dạng phức tạp bằng biểu thức chính quy .
Bước 1. Hiểu định dạng đầu vào. 123. .
Bước 2. Nhập các gói cần thiết. Chúng ta sẽ cần mô-đun Biểu thức chính quy và gói gấu trúc. .
Bước 3. Định nghĩa biểu thức chính quy. .
Bước 4. Viết trình phân tích cú pháp dòng. .
Bước 5. Viết trình phân tích tệp. .
Bước 6. Kiểm tra trình phân tích cú pháp

Chủ Đề