Mảng tofile python

If you're trying to use exec in a script that uses signal SIGCHLD, (i.e. pcntl_signal(SIGCHLD,'sigHandler');) it will return -1 as the exit code of the command (although output is correct!). To resolve this remove the signal handler and add it again after exec. Code will be something like this:

...
pcntl_signal(SIGCHLD, 'sigHandler');
...
...
(more codes, functions, classes, etc)
...
...
// Now executing the command via exec
// Clear the signal
pcntl_signal(SIGCHLD, SIG_DFL);
// Execute the command
exec('mycommand',$output,$retval);
// Set the signal back to our handler
pcntl_signal(SIGCHLD, 'sigHandler');
// At this point we have correct value of $retval.

Same solution can apply to system and passthru as well.

Dữ liệu luôn được ghi theo thứ tự 'C', không phụ thuộc vào thứ tự của một. Dữ liệu do phương pháp này tạo ra có thể được khôi phục bằng hàm fromfile()

Tham sốfidfile hoặc str hoặc Path

Một đối tượng tệp đang mở hoặc một chuỗi chứa tên tệp

Thay đổi trong phiên bản 1. 17. 0. các đối tượng hiện được chấp nhận

vách ngăn

Dấu phân cách giữa các mục mảng để xuất văn bản. Nếu “” (trống), tệp nhị phân được ghi, tương đương với file.write(a.tobytes())

định dạngtr

Định dạng chuỗi cho đầu ra tệp văn bản. Mỗi mục trong mảng được định dạng thành văn bản trước tiên bằng cách chuyển đổi nó thành loại Python gần nhất, sau đó sử dụng mục “format” %

ghi chú

Đây là một chức năng tiện lợi để lưu trữ nhanh dữ liệu mảng. Thông tin về độ bền và độ chính xác bị mất, vì vậy phương pháp này không phải là lựa chọn tốt cho các tệp nhằm lưu trữ dữ liệu hoặc truyền dữ liệu giữa các máy có độ bền khác nhau. Một số vấn đề này có thể được khắc phục bằng cách xuất dữ liệu dưới dạng tệp văn bản, với chi phí là tốc độ và kích thước tệp

Khi fid là một đối tượng tệp, nội dung mảng được ghi trực tiếp vào tệp, bỏ qua phương thức write của đối tượng tệp. Do đó, tofile không thể được sử dụng với các đối tượng tệp hỗ trợ nén (e. g. , GzipFile) hoặc các đối tượng giống như tệp không hỗ trợ fileno() (e. g. , byteIO)

"Câu trả lời" của tôi thực sự là một nhận xét về các câu trả lời khác nhau. Tôi không thể bình luận vì tôi không có 50 danh tiếng

Nếu tệp được đọc lại bởi Python, thì hãy sử dụng mô-đun "Pickle". Một công cụ này có thể đọc và viết nhiều thứ bằng nhị phân

Nhưng cách đặt câu hỏi, nói rằng "mã hóa 32 bit của IEEE", có vẻ như tệp sẽ được đọc lại bằng các ngôn ngữ khác. Trong trường hợp đó, byte thứ tự nên được định chỉ. Vấn đề là hầu hết các máy là x86, với đơn đặt hàng ít byte, nhưng ngôn ngữ xử lý dữ liệu số là Java/JVM, sử dụng byte thứ tự lớn. Vì vậy, python "tofile()" sẽ sử dụng C, sử dụng Little Endian để làm ít endian máy chủ, và sau đó mã xử lý dữ liệu trên Java/JVM sẽ giải mã bằng cách sử dụng Big Endian, dẫn đến lỗi

To work with JVM

# convert to bytes, BIG endian, for use by Java
import struct
f = [3.14, 2.7, 0.0, -1.0, 1.1]
b = struct.pack('>'+'f'*len(f), *f)

with open("f.bin", "wb") as file:
    file.write(b)

Go to Java

try(var stream = new DataInputStream(new FileInputStream("f.bin")))
{
    for(int i = 0; i < 5; i++)
        System.out.println(stream.readFloat());
}
catch(Exception ex) {}

Vấn đề bây giờ là mã Python

try(var stream = new DataInputStream(new FileInputStream("f.bin")))
{
    for(int i = 0; i < 5; i++)
        System.out.println(stream.readFloat());
}
catch(Exception ex) {}
0 - hy vọng trình giao dịch không thực sự tạo ra chuỗi "ffffff. "siêu dài

Tôi sẽ sử dụng mảng và byte numpy

import numpy, sys
f = numpy.array([3.14, 2.7, 0.0, -1.0, 1.1], dtype=numpy.float32)

if sys.byteorder == "little":
    f.byteswap().tofile("f.bin") # using BIG endian, for use by Java
else:
    f.tofile("f.bin")

phương pháp

ndarray. tofile (fid, sep = '', format = '%s')#tofile(fid, sep='', format='%s')#

Viết mảng vào một tệp dưới định dạng văn bản hoặc nhị phân (mặc định)

Dữ liệu luôn được viết theo thứ tự C, độc lập với thứ tự của a. Dữ liệu được tạo bởi phương pháp này có thể được khôi phục bằng cách sử dụng hàm fromfile()

Tham sốfidfile or str or pathfid file or str or Path

Một tệp đối tượng mở hoặc một chuỗi chứa tên tệp

Đã thay đổi trong phiên bản 1. 17. 0.

try(var stream = new DataInputStream(new FileInputStream("f.bin")))
{
    for(int i = 0; i < 5; i++)
        System.out.println(stream.readFloat());
}
catch(Exception ex) {}
1 object đã được chấp nhận. ______11 đối tượng hiện đã được chấp nhận.

SEPPTR str

Phân chia giữa các mảng mục cho đầu ra văn bản. Nếu có nghĩa là (trống), một tệp nhị phân đã được viết, tương đương với

try(var stream = new DataInputStream(new FileInputStream("f.bin")))
{
    for(int i = 0; i < 5; i++)
        System.out.println(stream.readFloat());
}
catch(Exception ex) {}
3

Định dạng str

Định dạng chuỗi cho đầu ra tệp văn bản. Mỗi mục trong mảng được định dạng thành văn bản bằng cách trước tiên chuyển đổi nó sang loại python gần nhất, sau đó sử dụng mục định dạng định dạng của định dạng

Ghi chú

Đây là một chức năng tiện lợi để lưu trữ dữ liệu nhanh chóng. Thông tin về mức độ chính xác và mức độ chính xác bị mất, vì vậy phương pháp này không phải là một lựa chọn tốt cho các tệp Mục đích lưu trữ dữ liệu hoặc vận chuyển dữ liệu giữa các máy có cuối cùng khác nhau. Một số vấn đề này có thể được giải quyết bằng cách xuất dữ liệu dưới dạng tệp văn bản, với tốc độ và kích thước tệp

Khi FID là một tệp đối tượng, mảng nội dung được ghi trực tiếp vào tệp, bỏ qua phương thức đối tượng tệp ____ ____. Do đó, TOFILE không thể sử dụng được với các đối tượng tệp hỗ trợ nén (ví dụ:. gzipfile) hoặc các đối tượng giống như tệp không hỗ trợ

try(var stream = new DataInputStream(new FileInputStream("f.bin")))
{
    for(int i = 0; i < 5; i++)
        System.out.println(stream.readFloat());
}
catch(Exception ex) {}
4 (ví dụ. byeo)


Các tệp "nhị phân" là bất kỳ tệp nào trong định dạng đó không được tạo thành từ các ký tự có thể đọc được. Các tệp nhị phân có thể bao gồm các tệp hình ảnh như JPEG hoặc GIF, tệp âm thanh như mp3 hoặc định dạng tài liệu nhị phân như Word hoặc PDF. Trong Python, các tệp được mở ở chế độ văn bản theo mặc định. Để mở các tệp ở chế độ nhị phân, khi chỉ định chế độ, hãy thêm 'B' vào nó

Ví dụ

f = open('my_file', 'w+b')
byte_arr = [120, 3, 255, 0, 100]
binary_format = bytearray(byte_arr)
f.write(binary_format)
f.close()

Điều này mở tệp trong chế độ ghi nhị phân và ghi nội dung mảng byte_arr dưới dạng byte trong tệp nhị phân, my_file