Python ghi ascii vào tập tin

có thể ghi các bảng ASCII ra một tệp hoặc đối tượng giống như tệp bằng cách sử dụng cùng cấu trúc lớp và giao diện người dùng cơ bản như để đọc bảng

Hàm cung cấp cách ghi bảng dữ liệu dưới dạng bảng ASCII đã định dạng

ví dụ

Để viết bảng ASCII được định dạng bằng hàm

>>> import numpy as np >>> from astropy.io import ascii >>> from astropy.table import Table >>> data = Table() >>> data['x'] = np.array([1, 2, 3], dtype=np.int32) >>> data['y'] = data['x'] ** 2 >>> ascii.write(data, 'values.dat', overwrite=True)

Tệp x y 1 1 2 4 3 9 9 sau đó sẽ chứa

x y 1 1 2 4 3 9

Cũng có thể và được khuyến khích sử dụng chức năng ghi từ giao diện cấp cao hơn trong gói (xem để biết thêm chi tiết). Ví dụ

>>> data.write('values.dat', format='ascii', overwrite=True)

Để có phiên bản ASCII dễ tái sản xuất hơn cho bảng của bạn, chúng tôi khuyên bạn nên sử dụng. Điều này lưu trữ tất cả siêu dữ liệu của bảng (đặc biệt là các loại và đơn vị cột) vào phần nhận xét ngay từ đầu trong khi vẫn duy trì khả năng tương thích với hầu hết các trình đọc CSV đơn giản. Nó cũng cho phép lưu trữ dữ liệu phong phú hơn như các cột đa chiều hoặc có độ dài thay đổi. Đối với ví dụ đơn giản của chúng tôi

>>> data.write('values.ecsv', overwrite=True)

Phần mở rộng >>> data.write('values.dat', format='ascii', overwrite=True) 2 được công nhận và ngụ ý sử dụng ECSV (tương đương với >>> data.write('values.dat', format='ascii', overwrite=True) 3). Tệp >>> data.write('values.dat', format='ascii', overwrite=True) 4 sau đó sẽ chứa

________số 8

Hầu hết các bảng đầu vào để đọc cũng có sẵn để viết. Điều này cung cấp rất nhiều tính linh hoạt trong định dạng để viết. Ví dụ bên dưới ghi dữ liệu dưới dạng bảng LaTeX, sử dụng tùy chọn gửi đầu ra tới >>> data.write('values.dat', format='ascii', overwrite=True) 5 thay vì tệp

x y 1 1 2 4 3 9 0

Ngoài ra còn có một công cụ Cython nhanh hơn để viết các định dạng đơn giản, được bật theo mặc định cho các định dạng này (xem tài liệu tham khảo). Để tắt công cụ này, hãy sử dụng tham số >>> data.write('values.dat', format='ascii', overwrite=True) 6

x y 1 1 2 4 3 9 2

Ghi chú

Đối với hầu hết các định dạng được hỗ trợ, người ta có thể viết một bảng bị che và sau đó đọc lại mà không làm mất thông tin về các mục trong bảng bị che. Điều này được thực hiện bằng cách sử dụng một mục nhập chuỗi trống để biểu thị giá trị bị che (thiếu). Xem phần để biết thêm thông tin

Tham số cho x y 1 1 2 4 3 9 7

Hàm nhận một số tham số quy định định dạng bảng kết xuất chi tiết. Mỗi loại được xử lý bởi một lớp Writer tương ứng có thể xác định các giá trị mặc định khác nhau, do đó, các mô tả bên dưới đôi khi đề cập đến các giá trị mặc định “điển hình”. Điều này đề cập đến người viết và các lớp Nhà văn tương tự khác

Một số lớp Writer định dạng đầu ra (e. g. hoặc ) chấp nhận các từ khóa bổ sung có thể tùy chỉnh thêm đầu ra. Xem tài liệu của các lớp này để biết chi tiết

đầu ra. đầu ra specifier

Có hai cách để chỉ định đầu ra cho thao tác ghi

  • Tên của một tập tin (chuỗi)

  • Đối tượng giống như tệp (từ open(), StringIO, v.v. )

bàn. bảng đầu vào

Bất kỳ giá trị nào được hỗ trợ để khởi tạo một đối tượng (xem ). Điều này bao gồm một bảng có danh sách các cột, từ điển các cột hoặc từ các mảng (có cấu trúc hoặc đồng nhất)

định dạng. định dạng đầu ra (mặc định=’cơ bản’)

Điều này chỉ định định dạng của bảng ASCII sẽ được ghi, chẳng hạn như bảng được phân tách bằng ký tự cơ bản, bảng có định dạng cố định hoặc bảng tương thích với CD, v.v. Giá trị của tham số này phải là một trong các

dấu phân cách. chuỗi phân cách cột

Chuỗi một ký tự được sử dụng để phân tách các trường thường mặc định là ký tự khoảng trắng. Các giá trị phổ biến khác có thể là “,” hoặc “. ” hoặc “\t”

bình luận. chuỗi xác định bắt đầu dòng nhận xét trong bảng đầu ra

Đối với Nhà văn, giá trị này mặc định là “#“. Bình luận nào được viết và như thế nào tùy thuộc vào định dạng đã chọn. Các nhận xét được định nghĩa là một danh sách các chuỗi trong phần tử >>> data.write('values.ecsv', overwrite=True) 5 của bảng đầu vào. Nhận xét trong siêu dữ liệu của nội dung đã cho thường sẽ được viết trước tiêu đề, mặc dù viết nhận xét bảng sau tiêu đề nhận xét. Để tắt viết bình luận, hãy đặt >>> data.write('values.ecsv', overwrite=True) 8

định dạng. dict của bộ chuyển đổi kiểu dữ liệu

Đối với mỗi khóa (tên cột), hãy sử dụng giá trị đã cho để chuyển đổi dữ liệu cột thành chuỗi. Nếu giá trị định dạng giống như chuỗi, thì nó được sử dụng như một câu lệnh định dạng Python (e. g. , '%0. 2f’ % giá trị). Nếu đó là một hàm có thể gọi được, thì hàm đó được gọi với một đối số duy nhất chứa giá trị cột sẽ được chuyển đổi. Thí dụ

x y 1 1 2 4 3 9 6

tên. danh sách tên cột đầu ra

Xác định danh sách đầy đủ các tên cột đầu ra để ghi cho bảng dữ liệu, ghi đè các tên cột hiện có

bao gồm_names. danh sách các tên để đưa vào đầu ra

Từ danh sách các tên cột được tìm thấy từ bảng dữ liệu hoặc tham số >>> data.write('values.ecsv', overwrite=True) 9, chọn chỉ xuất các cột trong danh sách này. Nếu không được cung cấp thì bao gồm tất cả các tên

loại trừ_names. danh sách các tên để loại trừ khỏi đầu ra

Loại trừ những tên này khỏi danh sách các cột đầu ra. Điều này được áp dụng sau khi lọc # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 0. Nếu không được chỉ định thì không có cột nào bị loại trừ

fill_values. danh sách các chỉ định giá trị điền

Điều này có thể được sử dụng để điền vào các giá trị còn thiếu trong bảng hoặc thay thế các giá trị có ý nghĩa đặc biệt

Xem phần để biết thêm thông tin về cú pháp. Cú pháp gần giống như khi đọc bảng. Có một giá trị đặc biệt # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 1 được sử dụng để nói “xuất chuỗi này cho tất cả các giá trị được che dấu trong một bảng được che dấu” (mặc định là sử dụng chuỗi rỗng # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 2)

x y 1 1 2 4 3 9 1

Lưu ý rằng khi viết bảng, tất cả các giá trị được chuyển đổi thành chuỗi trước khi bất kỳ giá trị nào được thay thế. Vì # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 3 chỉ thay thế các ô khớp chính xác với thông số kỹ thuật nên bạn cần cung cấp biểu diễn chuỗi (đã loại bỏ khoảng trắng) cho từng giá trị. Ví dụ, trong các lệnh sau, # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 4 được định dạng bằng hai chữ số sau dấu phẩy, vì vậy chúng ta cần thay thế # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 5 chứ không phải # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 4

x y 1 1 2 4 3 9 6

Tương tự, nếu bạn thay thế một giá trị trong cột có định dạng độ dài cố định (e. g. , # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 7) thì chuỗi bạn muốn thay thế phải có cùng số ký tự. Trong ví dụ trên, # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 8 sẽ hoạt động

fill_include_names. danh sách các tên cột, bị ảnh hưởng bởi # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 3

Nếu không được cung cấp, thì # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 3 có thể ảnh hưởng đến tất cả các cột

fill_exclude_names. danh sách các tên cột, không bị ảnh hưởng bởi # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 3

Nếu không được cung cấp, thì # %ECSV 1.0 # --- # datatype: # - {name: x, datatype: int32} # - {name: y, datatype: int32} # schema: astropy-2.0 x y 1 1 2 4 3 9 3 có thể ảnh hưởng đến tất cả các cột

fast_writer. có nên sử dụng trình viết Cython nhanh hay không

Nếu tham số này là x y 1 1 2 4 3 9 03 (theo mặc định), sẽ cố gắng sử dụng trình ghi nhanh hơn (được mô tả trong ) nếu có thể. Chỉ định x y 1 1 2 4 3 9 05 sẽ vô hiệu hóa hành vi này

Writer Writer class (không được dùng để ủng hộ x y 1 1 2 4 3 9 06)

Điều này chỉ định định dạng cấp cao nhất của bảng ASCII sẽ được ghi, chẳng hạn như bảng được phân cách bằng ký tự cơ bản, bảng có định dạng cố định hoặc bảng tương thích với CDS, v.v. Giá trị của tham số này phải là một lớp Nhà văn. Đối với việc sử dụng cơ bản, điều này có nghĩa là một trong những cài đặt sẵn. Lưu ý rằng lớp Reader và lớp Writer là đồng nghĩa;

Định dạng bảng có thể đọc bằng máy

Định dạng Bảng có thể đọc bằng máy (MRT) của Tạp chí Hiệp hội Thiên văn Hoa Kỳ bao gồm một tệp duy nhất có tiêu đề mô tả bảng và chính dữ liệu của bảng. MRT tương tự như tiêu chuẩn định dạng CDS, nhưng khác ở phần mô tả bảng và thiếu tệp x y 1 1 2 4 3 9 07 riêng. Astropy không hỗ trợ ghi ở định dạng CDS

Người viết hỗ trợ viết bảng sang định dạng MRT

Ghi chú

Siêu dữ liệu của bảng, ngoài cột x y 1 1 2 4 3 9 09, x y 1 1 2 4 3 9 20 và x y 1 1 2 4 3 9 21, không được ghi trong tệp đầu ra. Phần giữ chỗ cho các trường tiêu đề, tác giả và tên bảng được đưa vào tệp đầu ra và có thể được chỉnh sửa sau khi viết

ví dụ

Lệnh x y 1 1 2 4 3 9 22 ghi một x y 1 1 2 4 3 9 23 sang định dạng MRT. Bộ chia phần x y 1 1 2 4 3 9 25 và x y 1 1 2 4 3 9 26 được sử dụng để chia bảng thành các phần khác nhau, với phần cuối cùng luôn là dữ liệu thực tế

Theo tiêu chuẩn MRT yêu cầu, đối với các cột có thuộc tính x y 1 1 2 4 3 9 09 không được đặt thành x y 1 1 2 4 3 9 03, tên đơn vị được lập bảng trong mô tả Byte-By-Byte của cột. Khi các cột không chứa bất kỳ đơn vị nào, thay vào đó, hãy đặt x y 1 1 2 4 3 9 25. Một x y 1 1 2 4 3 9 60 được thêm tiền tố vào phần mô tả cột trong Byte-By-Byte cho các cột x y 1 1 2 4 3 9 61 hoặc các cột có giá trị null, biểu thị chúng như vậy

Ví dụ bên dưới khởi tạo một bảng có các cột có thuộc tính x y 1 1 2 4 3 9 09 và có các giá trị ẩn

x y 1 1 2 4 3 9 0

Lưu ý rằng đối với các cột có và các giá trị liên quan, người viết không thực hiện bất kỳ chuyển đổi hoặc sửa đổi nội bộ nào. Các cột này phải được chuyển đổi thành các cột thông thường với thuộc tính x y 1 1 2 4 3 9 09 và x y 1 1 2 4 3 9 20 thích hợp trước khi viết bảng. Như vậy

x y 1 1 2 4 3 9 1

Các cột là đối tượng hoặc cột có giá trị là các đối tượng như vậy được nhận dạng như vậy và một số nhãn và mô tả được xác định trước được sử dụng cho chúng. Các cột tọa độ đã được chia nhỏ bổ sung thành các cột thành phần tọa độ của chúng. Các biểu diễn có các thành phần x y 1 1 2 4 3 9 69 và x y 1 1 2 4 3 9 10 được chia thành các thành phần x y 1 1 2 4 3 9 11-x y 1 1 2 4 3 9 12-x y 1 1 2 4 3 9 13 và x y 1 1 2 4 3 9 14-x y 1 1 2 4 3 9 15-x y 1 1 2 4 3 9 16 tương ứng. Trong khi các cột có các đối tượng >>> data.write('values.dat', format='ascii', overwrite=True) 1 trong x y 1 1 2 4 3 9 18 hoặc bất kỳ khung x y 1 1 2 4 3 9 19 nào chỉ được chia thành các thành phần vĩ độ (x y 1 1 2 4 3 9 60/x y 1 1 2 4 3 9 61) và kinh độ (x y 1 1 2 4 3 9 62/x y 1 1 2 4 3 9 61) của chúng. Bảng gốc vẫn có thể truy cập như vậy, trong khi tệp được ghi từ một bản sao đã sửa đổi của bảng. Các cột thành phần tọa độ mới được thêm vào cuối bảng

Cần lưu ý rằng độ chính xác mặc định của các cột vĩ độ, kinh độ và giây (của cung) được đặt ở số mặc định là 12, 10 và 9 chữ số sau dấu thập phân cho các giá trị x y 1 1 2 4 3 9 14, x y 1 1 2 4 3 9 13 và x y 1 1 2 4 3 9 16 tương ứng. Giá trị mặc định này được đặt để khớp với độ chính xác của máy là 1e-15 so với >>> data.write('values.dat', format='ascii', overwrite=True) 1 ban đầu, các cột đó được trích xuất từ. Như tất cả các cột khác, định dạng có thể được thiết lập rõ ràng bằng cách chuyển từ khóa x y 1 1 2 4 3 9 68 đến hàm x y 1 1 2 4 3 9 69 hoặc bằng cách đặt thuộc tính x y 1 1 2 4 3 9 06 của các cột riêng lẻ (cái sau sẽ chỉ hoạt động đối với các cột không được phân tách). Để tùy chỉnh số chữ số có nghĩa, do đó, các dự đoán phải được chỉ định trong từ điển x y 1 1 2 4 3 9 68 cho các tên cột đầu ra, chẳng hạn như x y 1 1 2 4 3 9 02 hoặc x y 1 1 2 4 3 9 03 để có độ chính xác mili giây. Lưu ý rằng các biểu mẫu có số 0 đứng đầu trong giây và bao gồm ký hiệu cho vĩ độ được khuyến nghị để có tính nhất quán và dễ đọc hơn

Đoạn mã sau minh họa điều trên

x y 1 1 2 4 3 9 2

Sau khi thực hiện, nội dung của x y 1 1 2 4 3 9 04 sẽ là

x y 1 1 2 4 3 9 3

Và tệp x y 1 1 2 4 3 9 05 sẽ trông giống như

x y 1 1 2 4 3 9 4

Cuối cùng, MRT có một số quy ước đặt tên cụ thể cho các cột (). Ví dụ: nếu một cột chứa lỗi trung bình cho dữ liệu trong cột có tên là x y 1 1 2 4 3 9 06, thì cột này phải được đặt tên là x y 1 1 2 4 3 9 07. Người viết MRT không thể thực thi các kiểu đặt tên cột tương đối này vì nó không biết ý nghĩa của dữ liệu cột và do đó, không thể tìm ra mối quan hệ giữa các cột. Do đó, tùy thuộc vào người dùng sử dụng x y 1 1 2 4 3 9 08 để đổi tên bất kỳ cột nào một cách thích hợp trước khi ghi bảng sang định dạng MRT. Ví dụ sau đây cho thấy tình huống tương tự, sử dụng tùy chọn gửi đầu ra tới >>> data.write('values.dat', format='ascii', overwrite=True) 5 thay vì tệp

x y 1 1 2 4 3 9 5

Chú ý

Trình ghi MRT hiện hỗ trợ ghi tự động một cột tọa độ trong x y 1 1 2 4 3 9 10. Đối với các bảng có nhiều cột tọa độ của một loại đã cho. g. xích đạo, thiên hà hoặc hoàng đạo), chỉ cột tọa độ được tìm thấy đầu tiên sẽ được phân tách thành các cột thành phần của nó và phần còn lại của các cột tọa độ cùng loại sẽ được chuyển đổi thành cột chuỗi. Do đó, người dùng nên lưu ý rằng các cột tọa độ bổ sung được xử lý (e. g. bằng cách chuyển đổi chúng thành các cột có giá trị x y 1 1 2 4 3 9 11 duy nhất) trước khi sử dụng các phương pháp >>> data.write('values.dat', format='ascii', overwrite=True) 1

Làm cách nào để in ASCII bằng Python?

Dưới đây là một số phương thức trong các ngôn ngữ lập trình khác nhau để in giá trị ASCII của một ký tự đã cho. Mã Python sử dụng hàm ord . thứ tự(). Nó chuyển đổi chuỗi có độ dài một, trả về một số nguyên đại diện cho điểm mã Unicode của ký tự. Ví dụ: ord('a') trả về số nguyên 97.

Làm cách nào để mã hóa tệp bằng Python?

Mã hóa tệp & ký tự .
Mở một tệp văn bản. Nếu bạn muốn đọc hoặc ghi một tệp văn bản bằng Python, trước tiên bạn phải mở tệp đó. .
Đọc một tệp văn bản. Một đối tượng tệp không chứa văn bản có thể đọc được. .
Viết một tệp văn bản. .
Thêm mã hóa (UTF-8). .
Mẹo gỡ lỗi. .
Nâng cao hơn. Mở và đọc tất cả các tệp trong một thư mục

Python 3 có sử dụng ASCII không?

Python 3 đã đến và sửa lỗi này. Các chuỗi vẫn là loại str theo mặc định nhưng giờ đây chúng có nghĩa là các điểm mã unicode — chúng tôi mang theo những gì chúng tôi thấy. Nếu chúng tôi muốn lưu trữ các chuỗi loại str này trong các tệp, chúng tôi sử dụng loại byte thay thế. Mã hóa mặc định là UTF-8 thay vì ASCII .

Làm cách nào để tạo một tệp văn bản trong Python?

Cách tạo tệp bằng Python. Trong Python, bạn sử dụng hàm open() với một trong các tùy chọn sau – "x" hoặc "w" – để tạo tệp mới . "x" – Tạo. lệnh này sẽ tạo một tệp mới khi và chỉ khi không có tệp nào tồn tại với tên đó, nếu không nó sẽ trả về lỗi.

Chủ đề