在Python中,对于二进制文件,我可以这样编写:
buf_size=1024*64 # this is an important size...
with open(file, "rb") as f:
while True:
data=f.read(buf_size)
if not data: break
# deal with the data....
对于要逐行读取的文本文件,我可以编写以下代码:
with open(file, "r") as file:
for line in file:
# deal with each line....
简写为:
with open(file, "r") as file:
for line in iter(file.readline, ""):
# deal with each line....
PEP
234中
记录了该惯用语,但我无法为二进制文件找到类似的惯用语。
我已经试过了:
>>> with open('dups.txt','rb') as f:
... for chunk in iter(f.read,''):
... i+=1
>>> i
1 # 30 MB file, i==1 means read in one go...
我尝试放置,iter(f.read(buf_size),'')
但这是语法错误,因为在iter()中的callable之后有括号。
我知道我可以编写一个函数,但是默认习惯用法有没有办法在for chunk in file:
哪里使用缓冲区大小而不是面向行?
感谢您忍受Python新手尝试编写他的第一个平凡而又惯用的Python脚本。
我不知道有任何内置方法可以执行此操作,但是包装函数很容易编写:
def read_in_chunks(infile, chunk_size=1024*64):
while True:
chunk = infile.read(chunk_size)
if chunk:
yield chunk
else:
# The chunk was empty, which means we're at the end
# of the file
return
然后在交互式提示下:
>>> from chunks import read_in_chunks
>>> infile = open('quicklisp.lisp')
>>> for chunk in read_in_chunks(infile):
... print chunk
...
<contents of quicklisp.lisp in chunks>
当然,您可以轻松地对此进行修改以使用with块:
with open('quicklisp.lisp') as infile:
for chunk in read_in_chunks(infile):
print chunk
您可以消除这样的if语句。
def read_in_chunks(infile, chunk_size=1024*64):
chunk = infile.read(chunk_size)
while chunk:
yield chunk
chunk = infile.read(chunk_size)
问题内容: 我发现用Python读取二进制文件特别困难。你能帮我个忙吗?我需要读取此文件,在Fortran 90中,该文件很容易被读取 详细而言,文件格式为: 如何使用Python阅读?我尝试了一切,但没有成功。我是否有可能在python中使用f90程序,读取此二进制文件,然后保存需要使用的数据? 问题答案: 读取二进制文件内容,如下所示: 然后使用struct.unpack “解压缩”二进制数据
本文向大家介绍使用Python进行二进制文件读写的简单方法(推荐),包括了使用Python进行二进制文件读写的简单方法(推荐)的使用技巧和注意事项,需要的朋友参考一下 总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块。 python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也没关系,因为string是
下面是一个上传二进制文件的例子,WebService类的代码如下: package service; import java.io.InputStream; import java.io.OutputStream; import java.io.FileOutputStream; import javax.activation.DataHandler; public class
根据https://docs.python.org/3.4/library/venv.html#module-venv所说的“每个虚拟环境都有自己的Python二进制文件(允许创建具有各种Python版本的环境)”,那么我如何使用具有Python 2.7二进制文件的venv模块来创建虚拟环境呢?
问题内容: 我正在使用Flash录制音频并将其上传到节点服务器。Flash客户端是jrecorder的变体。当用户完成录制后,将使用POST请求(而不是表单,因为Flash无法创建文件)来上传音频,并将音频ByteArray作为POST请求的数据(请参见此处的更多信息)。 我可以使用下面的代码在Node- land上正确接收文件,但是发出的音频被破坏了,您听不到任何声音。话虽如此,该文件的内容可以
问题内容: 为了将二进制文件上传到URL,建议使用本指南。但是,该文件不在目录中,而是存储在MySql db的BLOB字段中。BLOB字段在JPA中映射为属性: 我以这种方式稍微修改了指南中的代码: 我没有使用分块流。使用的标头是: 主机正确接收了所有标头。它还接收上载的文件,但不幸的是,它抱怨该文件不可读,并且断言所接收文件的大小比我的代码输出的大小大37个字节。 我对流,连接和byte []的