Python ile hareket etmeden önce dosyayı kapat [kapalı]


-1

Shutil.move () kullanarak bir dosyayı taşımaya çalışırken bir sorun var, muhtemelen dosya hala açık. Hata ayıklayıcıda çalıştırırken sorunum yok ... Ama betiği çalıştırdığımda şu hatayı alıyorum:

WindowsError: [Error 32] Başka bir işlem tarafından kullanıldığı için işlem dosyaya erişemiyor.

İşte soruna neden olan kodumun bir bloğu. Sorunu önlemek için bu nasıl değiştirilebilir?

while len(args) > 0:
    outdir = args.pop()
    indir  = args.pop()
    inouts.append( (indir,outdir) )

    listFile = os.listdir(indir)
    os.chdir(indir)

    for report in listFile:
        abs_report = os.path.abspath(report)
        for line in open(abs_report):
            if header not in line:
                if ref in line:
                    shutil.move(abs_report,Pull)
                    logger.write("File " + report + " has been moved to " + Pull + " at " +  str(datetime.now()) + "\n")
                    break
                else:
                    shutil.move(abs_report,outdir)
                    logger.write("File " + report + " has been moved to " + outdir + " at " + str(datetime.now()) + "\n")
                    break

Sormanız engellendiğinde soru sorma yeri burası değildir Yığın Taşması . Onların takip etmelisin soru yasakları hakkında rehberlik
— Mokubai

Şey ... Amacını anlıyorum. Kurallarını ve rehberliklerini takip etmeye çalışıyordum ama hala bir soru göndermeme izin vermedi. Dolayısıyla bir seçeneğim yoktu.
— susik

Yanıtlar:


1

Dosyayı taşımadan önce döngüden çıkmanız gerekir:

listFile = os.listdir(indir)
os.chdir(indir)

for report in listFile:
    abs_report = os.path.abspath(report)
    is_pull = None
    for line in open(abs_report):
        if header not in line:
            is_pull = (ref in line)
            break
    if is_pull is not None:
        if is_pull:
            shutil.move(abs_report,Pull)
            logger.write("File " + report + " has been moved to " + Pull + " at " +  str(datetime.now()) + "\n")
        else:
            shutil.move(abs_report,outdir)
            logger.write("File " + report + " has been moved to " + outdir + " at " + str(datetime.now()) + "\n")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.