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

2024-06-24 13:33:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python重命名一个目录中的多个文件,但是for循环中的计数从未更新,所以我得到了一个“file already 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()

谢谢你的预付款。你知道吗

附言:对不起,我的英语不好


Tags: pathnameimporttxtforosdefdir
2条回答

请替换这段代码:

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)

请三思:enumerate(glob.glob(current_dir + '\packettest.txt')),你想做什么?只有一个文件,你不使用通配符(*,等等),为什么你需要一个循环在这里,你期待什么结果?你知道吗

下面(避免递增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' ))

相关问题 更多 >