我正在研究.json以.csv转换。我正在从文件夹中读取一个 .json 文件并拆分该文件,并将结果写入同一文件夹中。
我想要的是将这些结果文件写入不同的文件夹。
new_path = 'C:/Users/toc/Desktop/Python_Codes/Data/Input'
name = askopenfilename(initialdir="C:/Users/toc/Desktop/Python_Codes/Data/JSON_File",
filetypes=(("Json File", "*.json"), ("All Files", "*.*")),
title="Choose a file."
)
try:
with open(name,'r', encoding='utf8') as infile:
o = json.load(infile)
chunkSize = 1
for i in range(0, len(o), chunkSize):
with open(name + '_' + str(i//chunkSize) + '.json', 'w') as outfile:
json.dump(o[i:i+chunkSize], outfile)
finally:
print("No file exists")
上面的代码是工作文件,我唯一需要知道的是如何将这些多个.json文件写入另一个文件夹,这是new_path
您可以使用 os.chdir(( 函数更改当前目录: https://docs.python.org/3.5/library/os.html#os.chdir
import os
new_path = 'C:/Users/toc/Desktop/Python_Codes/Data/Input'
name = askopenfilename(initialdir="C:/Users/toc/Desktop/Python_Codes/Data/JSON_File",
filetypes=(("Json File", "*.json"), ("All Files", "*.*")),
title="Choose a file."
)
try:
with open(name,'r', encoding='utf8') as infile:
o = json.load(infile)
chunkSize = 1
os.chdir(newpath)
new_name = os.path.basename(name)
for i in range(0, len(o), chunkSize):
with open(new_name + '_' + str(i//chunkSize) + '.json', 'w') as outfile:
json.dump(o[i:i+chunkSize], outfile)
finally:
print("No file exists")
编辑:正如ShadowRanger所说,您需要先使用os.path.basename
从name
中删除目录。
这是一个相对常见的操作,你可以通过一点谷歌搜索找到很多方法来做到这一点,但要回答你的问题......
您可以将任何合格的文件传递到 Open 中,因此我们只需要将您的 newpath 与文件组合在一起(正如@Tajinder在他的答案中所做的那样(。您可以查看库来帮助使其更安全,更干净,但我喜欢使用os.path
因此,您的代码可能如下所示:
import os
new_path = 'C:/Users/toc/Desktop/Python_Codes/Data/Input'
name = askopenfilename(initialdir="C:/Users/toc/Desktop/Python_Codes/Data/JSON_File",
filetypes=(("Json File", "*.json"), ("All Files", "*.*")),
title="Choose a file."
)
try:
with open(name,'r', encoding='utf8') as infile:
o = json.load(infile)
chunkSize = 1
for i in range(0, len(o), chunkSize):
with open(os.path.join(newpath, os.path.basename(name).rsplit('.',1)[0] + '_' + str(i//chunkSize) + '.json'), 'w') as outfile:
json.dump(o[i:i+chunkSize], outfile)
finally:
print("No file exists")
编辑以执行快速修复(阅读不是最干净的方式(以从名称中删除目录部分和扩展名,@ShadowRanger正确地指出,这很可能是一个合格的路径。
希望,我正确理解了你的问题。您可以查看以下代码。我认为您可以在编写时提及带有文件名的路径。Chane C:/Path_to_output_directory/
到实际输出路径。
更改: with open( 'C:/Path_to_output_directory/' + name + '_' + str(i // chunkSize) + '.json', 'w') as outfile:
new_path = 'C:/Users/toc/Desktop/Python_Codes/Data/Input'
name = askopenfilename(initialdir="C:/Users/toc/Desktop/Python_Codes/Data/JSON_File",
filetypes=(("Json File", "*.json"), ("All Files", "*.*")),
title="Choose a file."
)
try:
with open(name, 'r', encoding='utf8') as infile:
o = json.load(infile)
chunkSize = 1
for i in range(0, len(o), chunkSize):
with open( 'C:/Path_to_output_directory/' + os.path.basename(name) + '_' + str(i // chunkSize) + '.json', 'w') as outfile:
json.dump(o[i:i + chunkSize], outfile)
finally:
print("No file exists")