Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python如何计算文本文件的大小_Python_Numpy - Fatal编程技术网

python如何计算文本文件的大小

python如何计算文本文件的大小,python,numpy,Python,Numpy,我使用以下代码保存到文本文件: filepath = open(filename, 'a') np.savetxt(filepath, C, fmt='%i') 我来自C,在那里我可以控制生成文件的大小,并提前知道。因此,我想了解在Python中如何计算文件的大小。我的程序生成一个numpy形状矩阵(12500,65),包含值1或-1。磁盘上生成的文本文件包含(2024874字节),这对我来说没有意义!不应计算为(假设有符号整数的大小为8,正如我明确提到的fmt='%I'):`12500*65

我使用以下代码保存到文本文件:

filepath = open(filename, 'a')
np.savetxt(filepath, C, fmt='%i')

我来自
C
,在那里我可以控制生成文件的大小,并提前知道。因此,我想了解在Python中如何计算文件的大小。我的程序生成一个
numpy
形状矩阵(12500,65),包含值1或-1。磁盘上生成的文本文件包含(
2024874
字节),这对我来说没有意义!不应计算为(假设有符号整数的大小为
8
,正如我明确提到的
fmt='%I'
):`12500*65*8=6500000字节?

如Mark所述,您正在保存文本,即
“1”
,而不是
\x01\x00…
。证明:

import io
import numpy as np

tenbyten = np.ones((10, 10), dtype=int)

myfile = io.BytesIO()
np.savetxt(myfile, tenbyten, fmt='%i')
len(myfile.getvalue()) # 200
myfile.getvalue()[:30] # b'1 1 1 1 1 1 1 1 1 1\n1 1 1 1 1 '
它是一个ASCII数字1和空格的字符串,带有换行符。我想你的有一些
-
。如果需要纯二进制,可以执行以下操作:

raw_data = tenbyten.tobytes() # .tofile() to go to a file instead of bytestring
len(raw_data) # 800
raw_data[:10] # b'\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00'
要获得与您的6.5MB相匹配的内容作为练习,您可以执行以下操作:
len(np.empty((12500,65),dtype='int64').tobytes())
注意,原始数据非常原始,并丢弃有关数据类型、endianness和shape的所有信息,因此以下是正确的:

np.ones((10, 10)).tobytes() == np.ones((5, 20)).tobytes() == np.ones(100).tobytes()
如果使用
np.save
,则会将二进制文件与元数据一起保存

my_npy = io.BytesIO()
np.save(my_npy, tenbyten)
len(my_npy.getbuffer()) # 880
my_npy.getvalue()[:70]
# b"\x93NUMPY\x01\x00F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (10, 10), "
my_npy=io.BytesIO()
np.save(我的npy,十比十)
len(my_npy.getbuffer())#880
my_npy.getvalue()[:70]

#b“\x93NUMPY\x01\x00F\x00{'descr':”如Mark所述,您正在保存文本,即
“1”
,而不是
\x01\x00…
。以演示:

import io
import numpy as np

tenbyten = np.ones((10, 10), dtype=int)

myfile = io.BytesIO()
np.savetxt(myfile, tenbyten, fmt='%i')
len(myfile.getvalue()) # 200
myfile.getvalue()[:30] # b'1 1 1 1 1 1 1 1 1 1\n1 1 1 1 1 '
它是一个ASCII数字1和空格的字符串,带有换行符。您的字符串中混合了一些
-
。如果您想要纯二进制,可以执行以下操作:

raw_data = tenbyten.tobytes() # .tofile() to go to a file instead of bytestring
len(raw_data) # 800
raw_data[:10] # b'\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00'
要获得与您的6.5MB相匹配的内容作为练习,您可以执行以下操作:
len(np.empty((12500,65),dtype='int64').tobytes())
注意,原始数据非常原始,并丢弃有关数据类型、endianness和shape的所有信息,因此以下是正确的:

np.ones((10, 10)).tobytes() == np.ones((5, 20)).tobytes() == np.ones(100).tobytes()
如果使用
np.save
,则会将二进制文件与元数据一起保存

my_npy = io.BytesIO()
np.save(my_npy, tenbyten)
len(my_npy.getbuffer()) # 880
my_npy.getvalue()[:70]
# b"\x93NUMPY\x01\x00F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (10, 10), "
my_npy=io.BytesIO()
np.save(我的npy,十比十)
len(my_npy.getbuffer())#880
my_npy.getvalue()[:70]

#b“\x93NUMPY\x01\x00F\x00{'descr':'我怀疑%I转换为32位整数,这意味着您的计算被关闭了一个因子2。
文件路径
的确切名称是什么?@madpysicator这有关系吗?它是文本、数字和特殊字符的组合。如果它以
.gz
结尾,则很重要。您查看了结果文件了吗?您正在保存吗文本格式:较小的数字需要较少的(十进制)数字比更大的数字大。没有理由假设每个条目有8个字节。我怀疑%I转换为32位整数,这意味着您的计算被关闭了2倍。您对
文件路径使用什么确切名称?@madpysicator这有关系吗?它是文本、数字和特殊字符的组合,如果以
.gz
。您是否查看了生成的文件?您正在以文本格式保存:一个较小的数字所需的(十进制)位数将少于一个较大的数字。没有理由假设每个条目有8个字节。