Я хочу прочитать байты из файла, а затем записать эти байты в другой файл и сохранить этот файл.
Как это сделать?
Я хочу прочитать байты из файла, а затем записать эти байты в другой файл и сохранить этот файл.
Как это сделать?
Вот как это сделать с основными файловыми операциями в 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)
В моих примерах я использую флаг '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()
Этот пример уточняется для чтения блоков 1 МБ, чтобы гарантировать, что он работает с файлами любого размера без исчерпания памяти:
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 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)
См. следующее:
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 килобайт за раз и записать его. Таким образом, вы можете поддерживать невероятно большие файлы, так как вам не нужно будет читать весь файл в памяти.
Используйте функцию open, чтобы открыть файл. Открытая функция возвращает файл-объект, который вы можете использовать для чтения и записи в файлы:
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