如何打开C程序生成的python中的复数文件?
How to open complex number file in python that generated by C program?
我的代码
with open('car.FT','r', encoding="utf-8",errors='ignore') as h:
for line in h:
print(line)
文件“car.FT”是具有复数值的傅立叶变换的输出 stored.It 是通过 C 程序编写的,但我想在 python 中打开此文件。
使用上面这段代码无法读取输出。
该文件是用 C 编写的:
typedef struct complex { /* Define a complex type */
float r,i; /* Real and imaginery parts */
} COMPLEX;
/* buffer for input image being converted into complex type */
COMPLEX IN_BUF[ROWS][COLS];
///PROCESSING ON IN_BUF////
fwrite(IN_BUF, sizeof(COMPLEX), ROWS*COLS, fout);
下面是文件中的实际数据。我想读。
我想在 python 中读取上述文件数据。
根据 C 代码判断,数字被写为二进制浮点数,您显示的是文件内容的十六进制输出。在这种情况下,您必须阅读 binary 内容,同时尝试将其作为文本文件阅读。
您必须以二进制模式打开文件 (rb
),使用 struct.unpack
读取并转换每个浮点值(长度为 4 个字节),并将浮点对转换为 complex
。这是一个简单的实现(未经测试):
from struct import unpack
numbers = []
with open(filename, "rb") as f:
data = f.read() # read all data
count = len(data) // 8 # each complex number takes 8 bytes
i = 0
for index in range(count):
# "f" means float (4 bytes); unpack returns a tuple with one value
real = unpack("f", data[i:i + 4])[0]
i += 4
im = unpack("f", data[i:i + 4])[0]
i += 4
numbers.append(complex(real, im))
print(numbers)
我的代码
with open('car.FT','r', encoding="utf-8",errors='ignore') as h:
for line in h:
print(line)
文件“car.FT”是具有复数值的傅立叶变换的输出 stored.It 是通过 C 程序编写的,但我想在 python 中打开此文件。 使用上面这段代码无法读取输出。 该文件是用 C 编写的:
typedef struct complex { /* Define a complex type */
float r,i; /* Real and imaginery parts */
} COMPLEX;
/* buffer for input image being converted into complex type */
COMPLEX IN_BUF[ROWS][COLS];
///PROCESSING ON IN_BUF////
fwrite(IN_BUF, sizeof(COMPLEX), ROWS*COLS, fout);
下面是文件中的实际数据。我想读。
我想在 python 中读取上述文件数据。
根据 C 代码判断,数字被写为二进制浮点数,您显示的是文件内容的十六进制输出。在这种情况下,您必须阅读 binary 内容,同时尝试将其作为文本文件阅读。
您必须以二进制模式打开文件 (rb
),使用 struct.unpack
读取并转换每个浮点值(长度为 4 个字节),并将浮点对转换为 complex
。这是一个简单的实现(未经测试):
from struct import unpack
numbers = []
with open(filename, "rb") as f:
data = f.read() # read all data
count = len(data) // 8 # each complex number takes 8 bytes
i = 0
for index in range(count):
# "f" means float (4 bytes); unpack returns a tuple with one value
real = unpack("f", data[i:i + 4])[0]
i += 4
im = unpack("f", data[i:i + 4])[0]
i += 4
numbers.append(complex(real, im))
print(numbers)