你可能会问我在哪里或如何找到这个文件。
我回答你 - 像这样:
import json,os,sys
e = r"C:\Program Files (x86)\T-Rex help\Mount & Blade - Napoleonic Wars Enhancement"
hjson = "."
name_ins = "filejson"
y=open(hjson+"\\"+name_ins+".json","w")
y.write("[")
dirs=[]
po=0
files=[]
number_of_file=0
y.write("[")
json.dump(os.path.split(os.path.abspath(e))[1],y)
def scandir1(m):
global number_of_file
for i in os.scandir(m):
if i.is_dir():
number_of_file += 1
print(os.path.abspath(i),"-->",hjson+"\\"+name_ins+".json")
y.write(",")
json.dump(os.path.relpath(i, e),y)
scandir1(os.path.abspath(i))
else:
pass
scandir1(e)
y.write("]")
y.write(",[")
def scandir2(m):
global number_of_file, po
for i in os.scandir(m):
if i.is_dir():
scandir2(os.path.abspath(i))
else:
number_of_file+=1
if po==0:
po=1
else:
y.write(",")
print(os.path.abspath(i),"-->",hjson+"\\"+name_ins+".json")
json.dump([os.path.relpath(i, e),
open(os.path.abspath(i), "rb").read().decode("Latin-1")],
y)
scandir2(e)
y.write("]")
y.write("]")
print("Загрузка данных...")
print("===============")
y.close()
该程序(立即)将列表写入 .json 文件[dirs,["name_file","file_read"]]
顺便说一句,游戏 C:\Program Files (x86)\T-Rex help\Mount & Blade - Napoleonic Wars Enhancement 重约 3 GB。
一切都什么都不是,但是当您尝试阅读此内容并循环安装时(即首先创建文件夹,然后创建文件)。
这是实际示例:
import json as js
import os, codecs
er=0
locate_wer=input("Введите путь к JSON файлу")
locate_dir = input("Введите путь к папке куда установить")
y=open(locate_wer,"r")
print(y.readline())
y.close()
files=r[1]
dirs=r[0]
gh=dirs[0]#gh это название папки из которой были взяты файлы снизу эта папка создаётся
try:
os.mkdir(locate_dir+"\\"+gh)
except FileExistsError: pass
for y in dirs[1:]:
print(locate_dir+"\\"+gh+"\\"+y)
os.mkdir(locate_dir+"\\"+gh+"\\"+y)
for y1 in files:
er+=1
try:
t=open(locate_dir+"\\"+gh+"\\"+y1[0],"w")
print(locate_dir + "\\" + gh + "\\" + y1[0])
t.write(y1[1])
t.close()
except UnicodeEncodeError:
t = codecs.open(locate_dir + "\\" + gh + "\\" + y1[0], "wb")
print(locate_dir + "\\" + gh + "\\" + y1[0])
t.write(y1[1].encode("Latin-1"))
t.close()
我一般认为有必要分篇阅读,但不知道怎么读
那么如何读取这个文件呢?
将 json 用于此类目的不是一个好主意:
另一方面,二进制数据可以组装成一个二进制文件(即使是一个接一个的愚蠢的文件合并,或者如果是压缩格式,即使只是 ZIP 更好),并在 JSON 中存储信息关于文件名,解压缩它们,将每个文件偏移到一个通用二进制文件中(如果它只是将所有文件粘合在一起)。
如果需要,可以将 JSON 本身附加到同一个二进制文件,例如,在文件末尾。添加到末尾比添加到开头更方便,因为 关于文件的所有信息都是已知的(每个文件从公共文件开头的相同偏移量),并且在添加新文件时,可以切断这个“尾巴”,添加一个新文件,并附加一个带有所有旧信息的新“尾巴”,以及有关新文件的信息。如果添加到文件的开头,那么首先需要将JSON写入文件,预先计算好所有偏移量,然后添加所有文件,添加新文件时需要写入JSON头到新文件,然后添加旧文件中的所有数据。顺便说一句,在 ZIP 格式中,“目录”存储在文件的末尾。
结果——我们分开存储大容量的二进制数据,元信息——分开。
如何将多个文件合并为一个文件:
该函数将文件列表和输出文件的名称作为输入,将列表中的所有文件写入一个文件,并为每个文件返回其与文件开头的偏移量(文件开始的字节数)和文件的大小。要从普通文件中读取一个文件,您需要移动到它的开头,并读取等于源文件大小的字节数。
结果列表已经可以保存在 JSON 中并以任何方式使用。
shutil.copyfileobj函数允许您复制大文件而无需将它们完全加载到内存中。复制发生在块中,块大小可以通过第三个参数设置。
文件“提取”功能:
应该记住,文件将以未压缩的形式存储,并且许多文件都被很好地压缩,因此您甚至可以使用 ZIP 代替二进制格式,特别是因为它在 Python 中支持开箱即用。
您可以在阅读时解析它,而不是读取整个 json 文件并创建它的内存表示。例如,使用iJSON。