2012-11-12 114 views
1

下面是代码片段。我有一个文件。计算内容的大小

f = open(self.reportSavePath,'w') 
self.test = ''; 
for file in file_sorted: 
    f.write(str(os.path.getmtime(file)) + "|" + file + "\r\n") 
    self.test = self.test + str(os.path.getmtime(file)) + "|" + file + "\r\n" 
f.close() 

print("Size:",os.path.getsize(self.reportSavePath)) #Without opening file 
print("Calculated size:",len(self.test.encode()))  #After reading the contents 

我的问题是,为什么最后两行给出不同的输出?他们应该不一样吗?

如果有什么原因,如何编辑与评论#Without opening file的行以匹配输出与行注释#After reading the contents

+0

你可以看到像自我这样的词,因为我已经从我的实现中复制了片段。如果问题不清楚,请评论,我会尽我所能编辑和解释,以获得您的帮助 – Romaan

+0

这将返回相同的结果,如果文件以二进制模式打开? – Romaan

回答

1

你在比较苹果和橘子。

os.path.getsizeof返回文件大小。 len(some_string)以字符形式返回字符串长度,而不管编码为,这会影响初始字节数。

+0

但是,它是不是我保存到文件中的相同的字符串? – Romaan

+2

@Romaan:字符串是相同的,但正如Yuval所说,'len'给出字符串中的字符数,而'getsize'则以字节为单位返回文件的大小。一个字节不一定是一个字符,就像一个字节不一定是音乐的一秒或位图图像文件的一个像素一样。 –