如何将文件写入指定的文件夹

时间:2019-07-17 11:50:56

标签: python python-3.x file path

我正在将.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

3 个答案:

答案 0 :(得分:1)

您可以使用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.basenamename中删除目录。

答案 1 :(得分:1)

希望,我正确理解了您的问题。您可以检查以下代码。 我认为您在编写时也可以使用文件名来提及路径。将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")

答案 2 :(得分:0)

这是一种相对常见的操作,您可以通过一些谷歌搜索找到很多方法来做到这一点,但是可以回答您的问题...

您可以将任何合格的文件传递为打开状态,因此我们只需要将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正确指出的名称中删除目录部分和扩展名,而这可能完全是一个合格的路径。