Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_File - Fatal编程技术网

用python读取文件

用python读取文件,python,file,Python,File,试图理解如何读取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(co

试图理解如何读取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

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

如果您的文件混淆了C库,那么您的结果是预期的

操作系统认为是180Mb

但是,到处都是空字节,这可能会混淆C stdio库


尝试用“rb”打开文件,看看是否得到不同的结果。

如果您的文件混淆了C库,那么您的结果是预期的

操作系统认为是180Mb

但是,到处都是空字节,这可能会混淆C stdio库


尝试用“rb”打开文件,看看是否会得到不同的结果。

第一次是以字节为单位的文件大小,另一次是以文本形式读取文件并计数字符。将所有的
open(filename,“r”)
更改为
open(filename,“rb”)
,它就可以工作了。

第一次是以字节为单位的文件大小,其他时候是以文本形式读取文件并计数字符。将所有的
open(filename,“r”)
更改为
open(filename,“rb”)
,它就会工作。

这与字符串无关:Python非常喜欢字符串中的空字节

这是因为您在Windows上,以文本模式打开文件,因此它会将所有“\n”转换为“\r\n”,从而销毁所有二进制数据


使用模式“rb”以二进制模式打开文件这与字符串无关:Python非常喜欢字符串中的空字节

这是因为您在Windows上,以文本模式打开文件,因此它会将所有“\n”转换为“\r\n”,从而销毁所有二进制数据


使用模式“rb”以二进制模式打开文件。

您在Windows上吗?如果改为以“rb”模式打开文件,会发生什么情况?您在Windows上吗?如果改为以“rb”模式打开文件会发生什么?那么如何检查字符串的大小(以字节为单位)?因为这就是你从f.read得到的字符串,不是吗?比如说,我想把一个文件从一台计算机发送到另一台计算机,它是一个大文件,所以必须逐件发送。首先,发送计算机将发送文件的大小,因此另一台计算机将知道所期望的内容。然后它将开始发送文件。另一台计算机必须计算得到的字节数,这样才能知道整个文件何时发送。那你怎么检查呢?那你怎么检查字符串的大小(以字节为单位)?因为这就是你从f.read得到的字符串,不是吗?比如说,我想把一个文件从一台计算机发送到另一台计算机,它是一个大文件,所以必须逐件发送。首先,发送计算机将发送文件的大小,因此另一台计算机将知道所期望的内容。然后它将开始发送文件。另一台计算机必须计算得到的字节数,这样才能知道整个文件何时发送。那你怎么检查呢?