функция не может правильно записать файл выходных данных - Python - PullRequest
0 голосов
/ 01 июня 2018

Сценарий:

У меня есть два файла, размер файла 1 = 19,7 МБ и размер файла 2 = 446 КБ .Я запускаю следующий код для обработки данных из обоих файлов и получения файла выходных данных.Но после определенного размера выходного файла (332 КБ) программа прекращает запись данных в выходной файл.Я попытался использовать функцию flush(), но снова выходной файл содержит точно такой же размер, что и выходной файл, без использования функции flush() (и потребовалось ровно то же время для записи этих данных в обоих условиях (файл создан и последний изменен)), в то время как циклВсе еще работает.

Пожалуйста, кто-нибудь предложит потенциальную причину (ы)?Должен ли я использовать функцию sleep(), чтобы разбудить программу через определенное время?Спасибо

with open("file2",'rU') as gg:
    for g in gg:
        g = g.rstrip().split('\t')
        with open(file1) as cc:
            c = c.rstrip().split('\t')
                if int(c[0]) == int(g[0]) and int(c[1]) >= int(g[2]) and int(g[3]) >= int(c[1]):
                    with open('output.txt', 'a') as ii:
                        ii.write(c[1]+'\t'+'\t'.join(g)+'\n')
                        ii.flush()

1 Ответ

0 голосов
/ 01 июня 2018

Вы создаете слишком много подключений к одному и тому же файлу, и для этого типа операций существует ограничение операционной системы.

попытайтесь удалить из сценария как можно больше

    new_list = []
    with open("file2",'rU') as gg:
        for g in gg:
            g = g.rstrip().split('\t')
            with open(file1) as cc:
                c = cc.rstrip().split('\t')
                if int(c[0]) == int(g[0]) and int(c[1]) >= int(g[2]) and int(g[3]) >= int(c[1]):
                    new_list.append(c[1]+'\t'+'\t'.join(g)+'\n')

    with open('output.txt', 'a') as ii:
        for e in new_list:
                    ii.write(e)
...