Python,如何从文件中读取字节并保存?

时间:2011-07-22 08:10:01

标签: python

我想从文件中读取字节,然后将这些字节写入另一个文件,并保存该文件。

我该怎么做?

4 个答案:

答案 0 :(得分:61)

以下是如何使用Python中的基本文件操作。这将打开一个文件,将数据读入内存,然后打开第二个文件并将其写出来。

in_file = open("in-file", "rb") # opening for [r]eading as [b]inary
data = in_file.read() # if you only wanted to read 512 bytes, do .read(512)
in_file.close()

out_file = open("out-file", "wb") # open for [w]riting as [b]inary
out_file.write(data)
out_file.close()

我们可以使用with键盘来处理关闭文件,从而更简洁地完成此操作。

with open("in-file", "rb") as in_file, open("out-file", "wb") as out_file:
    out_file.write(in_file.read())

如果您不想将整个文件存储在内存中,可以将其分段传输。

piece_size = 4096 # 4 KiB

with open("in-file", "rb") as in_file, open("out-file", "wb") as out_file:
    while True:
        piece = in_file.read(piece_size)

        if piece == "":
            break # end of file

        out_file.write(piece)

答案 1 :(得分:8)

在我的例子中,我打开文件时使用'b'标志('wb','rb'),因为你说你想读取字节。 'b'标志告诉Python不要解释操作系统之间可能不同的行尾字符。如果您正在阅读文本,则省略'b'并分别使用'w'和'r'。

使用“最简单”的Python代码在一个块中读取整个文件。这种方法的问题在于,在读取大文件时可能会耗尽内存:

ifile = open(input_filename,'rb')
ofile = open(output_filename, 'wb')
ofile.write(ifile.read())
ofile.close()
ifile.close()

此示例经过精炼,可读取1MB块,以确保它适用于任何大小的文件,而不会耗尽内存:

ifile = open(input_filename,'rb')
ofile = open(output_filename, 'wb')
data = ifile.read(1024*1024)
while data:
    ofile.write(data)
    data = ifile.read(1024*1024)
ofile.close()
ifile.close()

此示例与上述相同,但利用with来创建上下文。这种方法的优点是退出上下文时文件会自动关闭:

with open(input_filename,'rb') as ifile:
    with open(output_filename, 'wb') as ofile:
        data = ifile.read(1024*1024)
        while data:
            ofile.write(data)
            data = ifile.read(1024*1024)

请参阅以下内容:

答案 2 :(得分:4)

with open("input", "rb") as input:
    with open("output", "wb") as output:
        while True:
            data = input.read(1024)
            if data == "":
                break
            output.write(data)

以上每次读取1千字节,并写下来。您可以通过这种方式支持令人难以置信的大文件,因为您不需要将整个文件读入内存。

答案 3 :(得分:2)

使用open功能打开文件。 open函数返回file object,您可以使用读取和写入文件:

file_input = open('input.txt') #opens a file in reading mode
file_output = open('output.txt') #opens a file in writing mode

data = file_input.read(1024) #read 1024 bytes from the input file
file_output.write(data) #write the data to the output file