使用 Python 的 glob 重命名多个文件(文件已存在)
rename multiple files using glob with Python (file already exists)
我试图用 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
编辑:
感谢您的评论,我了解枚举的作用,但问题仍然存在,我仍然等于 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()
感谢提前。
P.S.: 对不起我的英语不好
下面(避免递增 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' ))
请替换这段代码:
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'))
,你想做什么?只有一个文件,您不使用通配符(*
等),为什么您需要在此处循环以及您期望的结果是什么?
我试图用 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
编辑:
感谢您的评论,我了解枚举的作用,但问题仍然存在,我仍然等于 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()
感谢提前。
P.S.: 对不起我的英语不好
下面(避免递增 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' ))
请替换这段代码:
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'))
,你想做什么?只有一个文件,您不使用通配符(*
等),为什么您需要在此处循环以及您期望的结果是什么?