0

フォルダ内にたくさんのファイルがあり、それらを次々に処理したいので、ユーザー識別子とフローカウントを記録するためのグローバルディクショナリが必要ですが、私のコードがこのような場合、2番目または3番目のファイルは処理されると、最後のファイルのuser_dictは失われます。

2番目のファイルのユーザーIDが最初のファイルと同じである場合、新しいフローカウントではなく同じフローカウントを割り当てる必要がある場合、ファイルを1つずつ開いたときに1つの辞書を増やし続けるにはどうすればよいですか?

 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"])

各ファイルのサイズが非常に大きいため、すべてを1つのファイルにマージしてから、スクリプトを実行して処理しました。しばらくするとコンピューターがプロセスを強制終了します。代わりに、ファイルを1つずつ処理する必要があります。

4

2 に答える 2

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():
        ....
于 2012-06-13T08:20:57.207 に答える
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)
于 2012-06-13T08:14:09.230 に答える