在单个目录下批量重命名文件时找不到指定的文件
Cannot find the file specified when batch renaming files in a single directory
我已经创建了一个简单的脚本来重命名我的媒体文件,这些文件中有很多奇怪的句点和我已经获得并想进一步组织的东西。我的脚本有点工作,我将编辑它以进一步编辑文件名,但我的 os.rename 行抛出此错误:
[Windows错误:错误2:系统找不到指定的文件。]
import os
for filename in os.listdir(directory):
fcount = filename.count('.') - 1 #to keep the period for the file extension
newname = filename.replace('.', ' ', fcount)
os.rename(filename, newname)
有人知道这是为什么吗?我有一种感觉,它不喜欢我在不包含文件路径的情况下尝试重命名文件?
尝试
os.rename(filename, directory + '/' + newname);
看来我只需要设置默认目录就可以了。
folder = r"blah\blah\blah"
os.chdir(folder)
for filename in os.listdir(folder):
fcount = filename.count('.') - 1
newname = filename.replace('.', ' ', fcount)
os.rename(filename, newname)
Triton Man 已经回答了你的问题。如果他的回答不起作用,我会尝试使用绝对路径而不是相对路径。
我以前做过类似的事情,但为了避免发生任何名称冲突,我暂时将所有文件移动到一个子文件夹中。整个过程发生得如此之快,以至于在 Windows Explorer 中我从未看到子文件夹被创建。
无论如何,如果您有兴趣查看我的脚本,它如下所示。您 运行 命令行上的脚本,您应该将要重命名的 jpg 文件的目录作为命令行参数传入。
这是我用来将 .jpg 文件重命名为 10 的倍数的脚本。看看它可能会有用。
'''renames pictures to multiples of ten'''
import sys, os
debug=False
try:
path = sys.argv[1]
except IndexError:
path = os.getcwd()
def toint(string):
'''changes a string to a numerical representation
string must only characters with an ordianal value between 0 and 899'''
string = str(string)
ret=''
for i in string:
ret += str(ord(i)+100) #we add 101 to make all the numbers 3 digits making it easy to seperate the numbers back out when we need to undo this operation
assert len(ret) == 3 * len(string), 'recieved an invalid character. Characters must have a ordinal value between 0-899'
return int(ret)
def compare_key(file):
file = file.lower().replace('.jpg', '').replace('dscf', '')
try:
return int(file)
except ValueError:
return toint(file)
#files are temporarily placed in a folder
#to prevent clashing filenames
i = 0
files = os.listdir(path)
files = (f for f in files if f.lower().endswith('.jpg'))
files = sorted(files, key=compare_key)
for file in files:
i += 10
if debug: print('renaming %s to %s.jpg' % (file, i))
os.renames(file, 'renaming/%s.jpg' % i)
for root, __, files in os.walk(path + '/renaming'):
for file in files:
if debug: print('moving %s to %s' % (root+'/'+file, path+'/'+file))
os.renames(root+'/'+file, path+'/'+file)
编辑:我摆脱了所有 jpg 绒毛。您可以使用此代码重命名您的文件。只需更改 rename_file 函数即可去除多余的点。我还没有测试过这段代码,所以它可能无法正常工作。
import sys, os
path = sys.argv[1]
def rename_file(file):
return file
#files are temporarily placed in a folder
#to prevent clashing filenames
files = os.listdir(path)
for file in files:
os.renames(file, 'renaming/' + rename_file(file))
for root, __, files in os.walk(path + '/renaming'):
for file in files:
os.renames(root+'/'+file, path+'/'+file)
我已经创建了一个简单的脚本来重命名我的媒体文件,这些文件中有很多奇怪的句点和我已经获得并想进一步组织的东西。我的脚本有点工作,我将编辑它以进一步编辑文件名,但我的 os.rename 行抛出此错误:
[Windows错误:错误2:系统找不到指定的文件。]
import os
for filename in os.listdir(directory):
fcount = filename.count('.') - 1 #to keep the period for the file extension
newname = filename.replace('.', ' ', fcount)
os.rename(filename, newname)
有人知道这是为什么吗?我有一种感觉,它不喜欢我在不包含文件路径的情况下尝试重命名文件?
尝试
os.rename(filename, directory + '/' + newname);
看来我只需要设置默认目录就可以了。
folder = r"blah\blah\blah"
os.chdir(folder)
for filename in os.listdir(folder):
fcount = filename.count('.') - 1
newname = filename.replace('.', ' ', fcount)
os.rename(filename, newname)
Triton Man 已经回答了你的问题。如果他的回答不起作用,我会尝试使用绝对路径而不是相对路径。
我以前做过类似的事情,但为了避免发生任何名称冲突,我暂时将所有文件移动到一个子文件夹中。整个过程发生得如此之快,以至于在 Windows Explorer 中我从未看到子文件夹被创建。
无论如何,如果您有兴趣查看我的脚本,它如下所示。您 运行 命令行上的脚本,您应该将要重命名的 jpg 文件的目录作为命令行参数传入。
这是我用来将 .jpg 文件重命名为 10 的倍数的脚本。看看它可能会有用。
'''renames pictures to multiples of ten'''
import sys, os
debug=False
try:
path = sys.argv[1]
except IndexError:
path = os.getcwd()
def toint(string):
'''changes a string to a numerical representation
string must only characters with an ordianal value between 0 and 899'''
string = str(string)
ret=''
for i in string:
ret += str(ord(i)+100) #we add 101 to make all the numbers 3 digits making it easy to seperate the numbers back out when we need to undo this operation
assert len(ret) == 3 * len(string), 'recieved an invalid character. Characters must have a ordinal value between 0-899'
return int(ret)
def compare_key(file):
file = file.lower().replace('.jpg', '').replace('dscf', '')
try:
return int(file)
except ValueError:
return toint(file)
#files are temporarily placed in a folder
#to prevent clashing filenames
i = 0
files = os.listdir(path)
files = (f for f in files if f.lower().endswith('.jpg'))
files = sorted(files, key=compare_key)
for file in files:
i += 10
if debug: print('renaming %s to %s.jpg' % (file, i))
os.renames(file, 'renaming/%s.jpg' % i)
for root, __, files in os.walk(path + '/renaming'):
for file in files:
if debug: print('moving %s to %s' % (root+'/'+file, path+'/'+file))
os.renames(root+'/'+file, path+'/'+file)
编辑:我摆脱了所有 jpg 绒毛。您可以使用此代码重命名您的文件。只需更改 rename_file 函数即可去除多余的点。我还没有测试过这段代码,所以它可能无法正常工作。
import sys, os
path = sys.argv[1]
def rename_file(file):
return file
#files are temporarily placed in a folder
#to prevent clashing filenames
files = os.listdir(path)
for file in files:
os.renames(file, 'renaming/' + rename_file(file))
for root, __, files in os.walk(path + '/renaming'):
for file in files:
os.renames(root+'/'+file, path+'/'+file)