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

2024-06-02 10:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做个数据存档,但是我的数据.gdf不应该是这样的数据.gdf是所有文件的连接,所有文件一个接一个地存储,没有任何分隔符。 存储在数据.gdh显然是高度关键的,如果任何文件无效,则无法再提取损坏记录所描述的文件,而且显然所有下一个文件也可能无法提取。我现在正在尝试创建一个png文件,但我现在不想创建一个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))

打印文件数据时:

YwuiHgData\images\background.png0FR1749FTeihwfwData\images\background1.png5FR354FTeihwfwData\images\gameover.png5FR0FTeihwfwData\images\ground.png5FR1571FTeihwfwData\images\icon.png5FR599FTeihwfwData\images\loadbackground.png5FR314FTeihwfwData\images\medal1.png5FR0FTeihwfwData\images\medal2.png5FR0FTeihwfwData\images\medal3.png5FR0FTeihwfwData\images\medal4.png5FR0FTeihwfwData\images\player1.png5FR0FTeihwfwData\images\player2.png5FR0FTeihwfwData\images\player3.png5FR0FTeihwfwData\images\playerdead.png5FR0FTeihwfwData\images\scorereward.png5FR0FTeihwfwData\images\start.png5FR239FTeihwfw

偏移量和数据长度似乎也很混乱。 我该怎么解决这些问题呢? 谢谢!在

编辑:这个问题已经被@XavierCombelle修复了,但是当我想加载一个图像时,我遇到了一个新的问题,例如列表background.png中的第一个。当我把它的完整路径Data\images\background.png时,它找不到路径,但当我只简单地输入background.png时,它会找到路径,这与\是转义码或类似的代码有关吗?我自己修好的:

^{pr2}$

Tags: 文件数据outputdatapngosaswith
2条回答

首先,您必须设置二进制模式(“rb”或“wb”用于任何非文本文件)

每次打开带有“r”或“w”(甚至是“rb”或“wb”)的文件时,都会重置为开始

要获得文件的数据偏移量,可以调用tell()方法

当你这么做的时候数据读取()它使用所有文件,因此后续读取返回长度为0的空字符串

所以核心回路可以用

#wb mode reset data.gdf so no need to doing previous write
with open('Output//data.gdf', 'wb') as gdf:            
    for i in files:
        with open(i, 'rb') as data_file:
            data = data_file.read()
            dataOffset = gdf.tell()
            gdf.write(data)
            dataLength = len(data)
            file_data += i + str(dataOffset) + 'FR' + str(dataLength) + 'FT' + 'eihwfw'

gdf文件格式看起来非常奇怪,例如,如果您有一个名为127FR49的文件FTeihwfw.png奇怪的事情会发生

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

可以将对输出文件的两个open()调用简化为一个,然后切换到追加:

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

数据长度混乱,因为第一个数据读取()一直读取到数据文件的末尾,因此len(数据读取())从文件末尾开始,不返回任何内容(因此len=0)。试试看:

^{pr2}$

相关问题 更多 >