如何使用Python更改目录中的多个文件名
我正在学习Python,我的任务是:如何使用Python更改目录中的多个文件名,python,file-handling,Python,File Handling,我正在学习Python,我的任务是: 将“文件”添加到目录中每个名称的开头 更改扩展名(目录当前包含4种不同类型:.py、.TEXT、.rtf、.TEXT) 我有很多文件,都有不同的名字,每个7个字符长。我可以更改扩展,但感觉很笨重。我确信有一种更干净的方法来写以下内容(但它的功能,因此没有关于该注释的投诉): 我还是有点问题: 脚本当前必须在我的目录中才能运行 我不知道如何在每个文件名的开头加上“file_u”[你会认为这是最简单的部分]。我已经试着把newname声明为 newname
- 将“文件”添加到目录中每个名称的开头
- 更改扩展名(目录当前包含4种不同类型:.py、.TEXT、.rtf、.TEXT)
newname = 'file_' + str(filename)
然后声明文件名未定义非常感谢您对我的两个现有问题提供的任何帮助。请使用
os.path.join()提供完整的路径名。
:
您可以从任何目录运行您的程序
您可以进一步简化您的程序:
extensions = ['.rtf', '.py', '.TEXT', '.text']
for extension in extensions:
if filename.endswith(extension):
newname = filename.replace(extension, '.txt')
os.rename(os.path.join(path, filename), os.path.join(path, newname))
break
不再需要所有其他elif
语句
import os, sys
path = 'data' // Initial path
def changeFileName( path, oldExtensions, newExtension ):
for name in os.listdir(path):
for oldExtension in oldExtensions:
if name.endswith(oldExtension):
name = os.path.join(path, name)
newName = name.replace(oldExtension, newExtension)
os.rename(name, newName)
break;
if __name__ == "__main__":
changeFileName( 'data', ['.py', '.rtf' , '.text', '.TEXT'], '.txt')
使用数组来存储所有旧的扩展并遍历它们 基本思想是首先获取文件扩展名部分和真实文件名部分,然后将文件名放入新字符串中
os.path.splitext(p)
方法将有助于获取文件扩展名,例如:os.path.splitext('hello.world.aaa.txt')
将返回['hello.world.aaa','.txt']
,它将忽略前导点
所以在这种情况下,可以这样做:
import os
import sys
path = 'C:/Users/dana/Desktop/text_files_2/'
for filename in os.listdir(path):
filename_splitext = os.path.splitext(filename)
if filename_splitext[1] in ['.rtf', '.py', '.TEXT', '.text']:
os.rename(os.path.join(path, filename),
os.path.join(path, 'file_' + filename_splitext[0] + '.txt'))
导入全局操作系统
路径='test/'#您的路径
扩展名=['.rtf'、'.py'、'.TEXT'、'.TEXT']
对于glob.glob(os.path.join(路径'*.'))中的文件:
文件路径,扩展名=os.path.splitext(文件)
如果扩展中包含扩展:
新文件名='{0}.txt'。格式(
os.path.basename(文件路径)
)
如果不是新的_file _name.startswith('file)):#检查文件allready的开头是否有'file u'
新建文件名='file{0}'。格式(#如果不添加
新文件名
)
新建_文件=os.path.join(
os.path.dirname(文件路径),
新文件名
)
重命名(文件,新文件)
获取不带扩展名的文件路径和扩展名f.efile\u path,extension=os.path.splitext(file)
('dir\u name/file\u name\u不带扩展名','.extension')
如果file\u path是os.path.dirname(file\u path)
结果将是dir1/dir2/file.ext,则获取目录f.e
'dir1/dir2'
获取不带扩展名的文件名os.path.basename(文件路径)
newname='file.'+filename
应该可以工作。您不需要使用str()
,因为filename
已经引用了一个字符串,但即使如此,它也应该可以工作。也许你是在循环之外尝试的?你是对的,它在我的循环之外。另一条评论:发布代码时请小心缩进。您知道这在Python中是至关重要的。例如,显示的代码将不会按原样编译。尝试此操作后,名称将被取消定义。声明这些扩展要简单得多-感谢您的建议。回溯(最近一次呼叫上次):文件“C:/Users/dana/Desktop/scott_suffix_change2.py”,第16行,os.rename(os.path.join(path,filename),os.path.join(name,newname))name错误:名称“name”未定义抱歉。打字错误更新了我的答案。不是name
,而是path
。这是一种有趣的方法,而且信息量很大。非常感谢。
import os, sys
path = 'data' // Initial path
def changeFileName( path, oldExtensions, newExtension ):
for name in os.listdir(path):
for oldExtension in oldExtensions:
if name.endswith(oldExtension):
name = os.path.join(path, name)
newName = name.replace(oldExtension, newExtension)
os.rename(name, newName)
break;
if __name__ == "__main__":
changeFileName( 'data', ['.py', '.rtf' , '.text', '.TEXT'], '.txt')
import os
import sys
path = 'C:/Users/dana/Desktop/text_files_2/'
for filename in os.listdir(path):
filename_splitext = os.path.splitext(filename)
if filename_splitext[1] in ['.rtf', '.py', '.TEXT', '.text']:
os.rename(os.path.join(path, filename),
os.path.join(path, 'file_' + filename_splitext[0] + '.txt'))