在Python中读取文件

1 投票
3 回答
1296 浏览
提问于 2025-04-15 13:21

我在尝试理解如何在Python中读取文件。以下是我做的事情,但似乎不太正常:

import os.path

filename = "A 180 mb large file.data"
size = os.path.getsize(filename)

f = open(filename, "r")
contents = f.read()
f.close()

print "The real filesize is", size
print "The read filesize is", len(contents)

f = open(filename, "r")

size = 0

while True:
    contents = f.read(4)
    if not contents: break
    size += len(contents)

f.close()

print "this time it's", size

输出结果:

The real filesize is 183574528
The read filesize is 10322
this time it's 13440

有人知道这是怎么回事吗? :)

3 个回答

0

这不是关于字符串的问题:Python在字符串中是可以处理空字节的。

这是因为你在Windows系统上,并且以文本模式打开文件,这样会把所有的"\n"转换成"\r\n",这就搞坏了你所有的二进制数据。

你应该用二进制模式打开文件,选择"rb"模式。

3

第一个是文件的大小,以字节为单位,其他时候你是把文件当作文本来读取,并且计算字符的数量。把所有的 open(filename, "r") 改成 open(filename, "rb") 就可以正常工作了。

5

如果你的文件让C语言的库搞不清楚状况,那你得到的结果就是这样。

操作系统认为这个文件有180Mb大。

不过,文件里有一些空字节,这可能会让C语言的标准输入输出库感到困惑。

试着用“rb”模式打开这个文件,看看结果是否会有所不同。

撰写回答