如何在python中逐个处理文件

时间:2012-06-13 08:05:01

标签: python

我在文件夹中有很多文件,我想一个接一个地处理它们,我需要有一个全局字典来记录用户标识符和flowcount,但是如果我的代码是这样的话,那么第二个或者处理完第三个文件后,最后一个文件的user_dict将丢失。

因为如果第二个文件中的用户ID与第一个文件中的用户ID相同,那么如果应该分配相同的flowcount而不是新的,那么在逐个打开文件时如何使一个字典保持增长?

 for line in fd.readlines():
    obj = json.loads(line)
    user = obj["host_dst"]["addr"] + '_' + str(obj["host_dst"]["port"])
    if user not in user_dict:
       user_dict[user] = []
    user_dict[user].append(obj["params"]["flowcount"])

由于每个文件的大小非常大,我将它们全部合并为一个文件,然后运行脚本进行处理,计算机将在一段时间后终止进程,我必须逐个处理它们

2 个答案:

答案 0 :(得分:4)

您可以在python脚本中打开多个文件,并使用for循环来处理每个文件

for filename in os.listdir(folderpath):
    filepath = os.path.join(folderpath, filename)
    fd = open(filepath, 'r')

    # here is your code
    for line in fd.readlines():
        ....

答案 1 :(得分:0)

您可以随时声明

global user_dict
你的代码中的

......但这是最好的方法吗?也许你应该使用一个类:

class FileProcessor(object):
    def __init__(self):
        self.user_dict = dict()

    def process_file(file_name):
        ....
        self.user_dict[]...

然后:

processor = FileProcessor()
for file in files:
    processor.process_file(file)