Python循环问题

时间:2011-03-17 04:38:13

标签: python function loops

我有一个脚本来计算文件夹中的文件数量,如果它小于最大数量,它会创建新文件,直到有正确的数字。理想情况下,删除旧文件时​​,应生成新文件。问题是,如果一次只删除一个文件,我的代码有时不会创建新文件。有时它会,有时它不会。如果一次删除多个文件,它将始终创建新文件。

import os

cfcount = 0
maxcalls = 7
run = 1
filecount = 0

def callFile(channel, maxretries, retrytime, waittime, context, ext):
    #create sting
    return callfile

def getCount():
    """Gets the number of callfiles in the directory"""
    count = 0
    files = os.listdir("c:\\proc")
    for file in files:
            if os.path.isfile("c:\\proc\\" + file):
                count += 1
                #print (count)
    return count

run = 1
while run == 1:
    """main loop that runs until there's no more people left to call"""
        filecount = getCount()    
        print (filecount)
        lacking_filecount = maxcalls - filecount
    while lacking_filecount > 0:
        cfcount += 1
        f = open("c:\proc\callfile" + str(cfcount) + ".call", 'w')
        f.write(callFile("SIP/200", '0', '0', '45', "call-file-test", '200'))
        f.close()
        print ("Filecount: " + str(filecount))
        print ("Callfile number: " + str(cfcount))
        lacking_filecount -= 1

如果我保留print(filecount)语句,我每次都能正常工作。如果我删除该语句,它有时会起作用,有时则不起作用。

这是输出

>>> 
0
Filecount: 0
Callfile number: 1
Filecount: 0
Callfile number: 2
Filecount: 0
Callfile number: 3
Filecount: 0
Callfile number: 4
Filecount: 0
Callfile number: 5
Filecount: 0
Callfile number: 6
Filecount: 0
Callfile number: 7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7

没有print(filecount),它看起来像这样。它工作到大约9号,然后如果只删除了一个文件则退出替换新文件。请注意,它仍会打印一个调用文件编号。

>>> 
Callfile number: 1
Callfile number: 2
Callfile number: 3
Callfile number: 4
Callfile number: 5
Callfile number: 6
Callfile number: 7
Callfile number: 8
Callfile number: 9
Callfile number: 10
Callfile number: 11
Callfile number: 12

这是getCount()循环内的print(文件)输出。它还没有与添加的印刷声明一起使用。

Callfile number: 17
callfile1.call
callfile17.call
callfile2.call
callfile3.call
callfile4.call
callfile5.call
callfile6.call
callfile1.call
callfile17.call

1 个答案:

答案 0 :(得分:2)

似乎是正在创建的文件与显示在os.listdir()输出中的文件之间的竞争条件。在大多数情况下,print语句可能需要 足够的时间在系统上“修复”它。

为什么不改变你的逻辑以便它只调用getCount()一次,然后创建适当数量的文件?

filecount = getCount()
lacking_filecount = maxcalls - filecount
while lacking_filecount > 0:
    # Create file...
    lacking_filecount -= 1

此外,您似乎有一个无限循环,因为您从未在循环中设置run