【问题标题】:Simultaneously Open, write and save multiple files separately同时单独打开、写入和保存多个文件
【发布时间】:2021-10-20 08:54:51
【问题描述】:

我创建了一个 python 代码来打开多个文件并编辑它们,最后分别保存每个文件

第一个输出的文件是可以的,但是之后其他文件的大小会逐个增加。

import json
import os
from datetime import datetime
os.chdir('C:\\Users\\user1\\Desktop\\Test')
list_Files = []

date = datetime.now()
result = []
counter = 0
cnt = 0
for single_file in os.listdir('C:\\Users\\user1\\Desktop\\Test') :
    list_Files.append(single_file)
    print(single_file)
    with open(single_file, encoding='utf-8') as fn:
        for line in fn.readlines():
            counter+=1
            result.append(json.loads(line))                  
    cnt+=1
    print(cnt)
    json_file = 'C:\\Users\\user1\\Desktop\\Out\\tst_'+f"{str(single_file)}{cnt}"'.json'
    with open(json_file, 'w') as outfile:
        json.dump(result, outfile)

【问题讨论】:

  • 您的问题到底是什么?
  • 输入文件大小相同,在第一个文件之后也需要更多时间
  • 你在输出文件中得到了什么?什么是额外的?打开新文件后,您没有重置result,所以这可能是问题
  • 如果我在没有循环的情况下单独运行每个文件,则所有文件的大小都相同,但是当我运行代码时,我认为它会用新文件损坏前一个文件
  • 我刚刚告诉你,你不是在重置结果,所以每个新文件都会有前一个文件的内容。使用with open() as fn打开每个文件后添加result = []

标签: python loops iteration


【解决方案1】:

在遍历所有文件之前初始化结果数组。在循环文件时,您会附加结果数组,从而使该数组更长result.append(json.loads(line))。然后,在文件循环中,将结果数组写入 json 文件。因此,每个新的 json 文件都会收到一个更长的结果数组,因此文件大小也会更大。

如果你在文件循环中初始化/重置你的结果数组,你会很好。请参阅下面的示例代码。

import json
import os
from datetime import datetime
os.chdir('C:\\Users\\user1\\Desktop\\Test')
list_Files = []

date = datetime.now()
# result = [] removed the results array here
counter = 0
cnt = 0
for single_file in os.listdir('C:\\Users\\user1\\Desktop\\Test') :
    result = [] # initialize/reset the results array here
    list_Files.append(single_file)
    print(single_file)
    with open(single_file, encoding='utf-8') as fn:
        for line in fn.readlines():
            counter+=1
            result.append(json.loads(line))                  
    cnt+=1
    print(cnt)
    json_file = 'C:\\Users\\user1\\Desktop\\Out\\tst_'+f"{str(single_file)}{cnt}"'.json'
    with open(json_file, 'w') as outfile:
        json.dump(result, outfile)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多