gpt4 book ai didi

python - 如何将png文件放入字符串并将其写入另一个文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:18 26 4
gpt4 key购买 nike

我正在尝试制作一个数据存档,但我的 data.gdf 不是应该的样子,data.gdf 是所有文件的串联,所有文件都一个接一个地存储,没有任何分隔符。data.gdh 中存储的起始偏移量和长度显然非常关键,如果有任何无效,则无法再提取损坏记录所描述的文件,并且显然所有后续文件也可能无法提取。现在我正在尝试使用 png 文件创建一个数据存档,但它似乎不起作用。

import os

#--------Encryption/Decryption of data---------#
hidden
#--------Encryption/Decryption of data---------#
# #
#--------------------Main----------------------#

with open('Output//data.gdf', 'w') as gdf: # clean data.gdf
gdf.write('')

files = []
for (path, dirnames, filenames) in os.walk('Data'):
files.extend(os.path.join(path, name) for name in filenames)

file_data = 'YwuiHg'
for i in files:
with open(i, 'r') as data:
with open('Output//data.gdf', 'r') as gdf:
dataOffset = len(gdf.read())
with open('Output//data.gdf', 'w') as gdf:
gdf.write(data.read())
dataLength = len(data.read())
file_data += i + str(dataOffset) + 'FR' + str(dataLength) + 'FT' + 'eihwfw'
print file_data
with open('Output//data.gdh', 'w') as gdh:
gdh.write(encrypt(key, file_data))

打印 file_data 时:

YwuiHgData\images\background.png0FR1749FTeihwfwData\images\background1.png5FR354FTeihwfwData\images\gameover.png5FR0FTeihwfwData\images\ground.png5FR1571FTeihwfwData\images\icon.png5FR599FTeihwfwData\images\loadbackground.png5 FR314FTeihwfwData\图像\medal1.png5FR0FTeihwfwData\图像\medal2.png5FR0FTeihwfwData\图像\medal3.png5FR0FTeihwfwData\图像\medal4.png5FR0FTeihwfwData\图像\player1.png5FR0FTeihwfwData\图像\player2.png5FR0FTeihwfwData\图像\player3.png5FR0FTeihwfwData\图像\playerdead.png5FR0FT eihwfwData\images\scorereward.png5FR0FTeihwfwData\images\开始.png5FR239FTeihwfw

偏移量和数据长度似乎也很困惑。我该如何解决这一切?非常感谢!

编辑:这个问题已被@XavierCbelle修复,但是当我想要加载图像时遇到了新问题,例如列表中的第一个background.png。当我输入其完整路径 Data\images\background.png 时,它找不到路径,但当我只是简单地输入 background.png 时,它会找到路径,这是否必须这样做\ 是转义码或类似的东西?我自己修复了:

try:
os.remove('Output//data.gdf')
except:
'file does not exist, no need to delete'

files = []
for (path, dirnames, filenames) in os.walk('Data'):
files.extend(os.path.join(path, name) for name in filenames)

file_data = 'YwuiHg'
#ab mode writes to the end of the file so need to have clean file when beginning to make new data.gdf otherwise the whole file would be messed up.
print 'Opening data.gdf for writing...\n'
with open('Output//data.gdf', 'ab') as gdf:
for i in files:
i.replace("\ ","\\")
with open(i, 'rb') as data_file:
data = data_file.read()
dataOffset = str(gdf.tell())
dataLength = str(len(data))
print 'Writing to data.gdf ' + i + ' at offset ' + dataOffset + '. Data Length ' + dataLength
gdf.write(data)
print 'Storing identity of data into file_data -> ' + i + dataOffset + 'FR' + dataLength + 'FT' + 'eihwfw\n'
file_data += i + dataOffset + 'FR' + dataLength + 'FT' + 'eihwfw'

print 'Encrypting file_data variable and writing it to data.gdh'
with open('Output//data.gdh', 'w') as gdh:
gdh.write(encrypt(key, file_data))

exiting = raw_input('Press any key to continue...')

最佳答案

open('Output//data.gdf', 'w') 将截断输出文件,丢失已写入其中的数据。因此,您的偏移量始终是先前写入的条目的长度(文件的其余内容每次都会丢失)。

您可以将输出文件上的两个 open() 调用简化为一个,并切换到附加:

with open('Output//data.gdf', 'a') as gdf:
dataOffset = gdf.tell()
gdf.write(data.read())

数据长度困惑,因为第一个 data.read() 一直读取到数据文件末尾,因此 len(data.read()) 从文件末尾开始,什么也不返回(所以长度= 0)。尝试一下:

dataLength = data.tell()

关于python - 如何将png文件放入字符串并将其写入另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25108126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com