使用glob和Python重命名多个文件(文件已存在)

使用glob和Python重命名多个文件(文件已存在),python,for-loop,glob,file-rename,enumerate,Python,For Loop,Glob,File Rename,Enumerate,我试图用Python重命名一个目录中的多个文件,但是for循环中的计数从未更新,所以我得到了一个“file ready exists”错误 如何获得更新的变量(I),从而使文件名不再重复 def change_name(): for i, filename in enumerate(glob.glob(current_dir + '\packettest.txt')): os.rename(filename, os.path.join(current_dir, 'pac

我试图用Python重命名一个目录中的多个文件,但是for循环中的计数从未更新,所以我得到了一个“file ready exists”错误

如何获得更新的变量(I),从而使文件名不再重复

def change_name():

    for i, filename in enumerate(glob.glob(current_dir + '\packettest.txt')):
        os.rename(filename, os.path.join(current_dir, 'packettest_sent' + str(i) + '.txt' ))
        i = i + 1
这是我得到的错误:

os.rename(filename, os.path.join(current_dir, 'packettest_sent' + str(i) + '.txt' ))
WindowsError: [Error 183] Cannot create a file when that file already exists
编辑:

感谢您的评论,我理解enumerate的功能,但问题仍然存在,我仍然等于0。这是我的完整代码:

import os.path
import sys
import glob
import time
current_dir = os.getcwd()
file_path = current_dir + "\packettest.txt"

#def main():

def change_name():

    for i, filename in enumerate(glob.glob(current_dir + '\packettest.txt')):
        os.rename(filename, os.path.join(current_dir, 'packettest_sent' + str(i) + '.txt' ))

def packet_listener():
    while not os.path.exists(file_path):
        time.sleep(1)
        print "waiting..."

    if os.path.isfile(file_path):
        # read file
        change_name()
        time.sleep(1)
        packet_listener()
        print "OK"    
    else:
        raise ValueError("%s isn't a file!" % file_path)

if __name__ == '__main__':
    packet_listener()
谢谢你提前通知

附言:很抱歉我的英语不好(请避免增加i,因为enumerate已经做过了)


请替换这段代码:

for i, filename in enumerate(glob.glob(current_dir + '\packettest.txt')):
    os.rename(filename, os.path.join(current_dir, 'packettest_sent' + str(i) + '.txt' ))
为此:

for i, filename in enumerate(glob.glob(current_dir + '\packettest.txt')):
    new_name = os.path.join(current_dir, 'packettest_sent' + str(i) + '.txt' )
    if os.path.isfile( new_name ) :
        print( 'file exists:', new_name )
    else :
        os.rename(filename, new_name)

请仔细考虑一下:
枚举(glob.glob(current_dir+'\packettest.txt')
,您想做什么?只有一个文件,您不使用通配符(
*
,等等),为什么需要在这里循环以及您期望的结果是什么?

使用
枚举时不要使用
i=i+1
您能列出目录内容吗?非常感谢。请再次检查代码。在目录中,将保存多个具有相同名称和相同格式的文件,因此我们的想法是脚本正在侦听新文件,一旦检测到,请更改名称,使其保留为记录。@androidBegginer好的,听起来似乎有道理,但是,我宁愿使用稍微不同的方法。感谢您的回答,这很有意义=)
for i, filename in enumerate(glob.glob(current_dir + '\packettest.txt')):
    new_name = os.path.join(current_dir, 'packettest_sent' + str(i) + '.txt' )
    if os.path.isfile( new_name ) :
        print( 'file exists:', new_name )
    else :
        os.rename(filename, new_name)