首页 > 解决方案 > 尽管替换了一个的输出,但文件是相同的

问题描述

问题: 我正在使用 python 来尝试随机化 Geometry Dash 图像。它们存储在GJ_GameSheetX显示大部分图像的大型 png 文件中(称为 ,其中 x 是 1 到 4 之间的数字)。它们附带一个 .plist 文件,该文件说明每个图像在 GameSheet 文件中的位置。我正在使用 python 来(尝试和)随机化 plist 文件说它们所在的位置 - 但输出文件与未更改的文件相同。 代码:

import random

# os.system("dir /b \"C:\\Program Files (x86)\\Steam\\steamapps\\common\\Geometry Dash\\Resources\" > directories.txt")
# Unnecessary dir

def wal(l, n):
    with open(fr"GameFiles\Finals\GS_{n}.txt", "w") as ff:
        ff.writelines(l)


for i in range(4):
    ii = "0" + str(i + 1)
    if ii == "01": ii = ""
    os.system(f"xcopy \"C:\\Program Files (x86)\\Steam\\steamapps\\common\\Geometry Dash\\Resources\\GJ_GameSheet{ii}.plist\" GameFiles /Y")
    with open(f"GameFiles\\GJ_GameSheet{ii}.plist", "r") as f:
        text_nosplit = str(f.read())
        ftext = text_nosplit.replace("\\n", "").replace(" ", "")
        ftext = ftext.split("</string>")

        for _ in range(5): # Recurses a few times to clear out the list properly.
            for x in range(len(ftext)):
                try:
                    if not ftext[x][0:4] == "<key>" or "smartupdate" in ftext[x]: ftext.pop(x)
                    try:
                        ftext[x].index("}}")
                        ftext[x] = ftext[x].replace("}}", "}}</string>")
                    except ValueError:
                        ftext[x] = ftext[x].replace("}", "}</string>")
                except IndexError:
                    break
        for x in range(len(ftext) - 1):
            l = ftext[x].index("<key")
            le = l + 1
            while ftext[x][le] != "<":
                le += 1
            ftext[x] = ftext[x].replace(ftext[x][l : le + 6], "")
            if ftext[x][-1] == "}":
                ftext[x] = ftext[x].replace("}", "}</string>")
            ftext[x] = ftext[x].replace("<string>", "")
            ftext[x] = ftext[x].replace("</string>", "")
            ftext[x] = ftext[x].replace("\n", "")
            ftext[x] = ftext[x].replace(" ", "")
        with open(fr"GameFiles\Finals\GS_{ii}.txt", "w") as ff:
            repls = []
            t_shuffled = random.sample(ftext, len(ftext))
            for n, i in enumerate(ftext):
                text_nosplit.replace(i, t_shuffled[n])
                if (n == len(ftext) - 1):   wal(text_nosplit, ii)

标签: pythonpython-3.x

解决方案


推荐阅读