我正在学习Python,我的任务是:
我有很多文件,都有不同的名字,每个长7个字符。我能够改变扩展,但感觉非常笨重。我很肯定有一种更清洁的方式来写下面的内容(但它的功能,所以没有对该注释的投诉):
import os, sys
path = 'C:/Users/dana/Desktop/text_files_2/'
for filename in os.listdir(path):
if filename.endswith('.rtf'):
newname = filename.replace('.rtf', '.txt')
os.rename(filename, newname)
elif filename.endswith('.py'):
newname = filename.replace('.py', '.txt')
os.rename(filename, newname)
elif filename.endswith('.TEXT'):
newname = filename.replace('.TEXT', '.txt')
os.rename(filename, newname)
elif filename.endswith('.text'):
newname = filename.replace('.text', '.txt')
os.rename(filename, newname)
我仍有一些问题:
我无法弄清楚如何将“file_”添加到每个文件名的开头[你认为这将是简单的部分]。我已经尝试将newname声明为
newname = 'file_' + str(filename)
然后声明文件名未定义。
对我现有的两个问题的任何帮助都将不胜感激。
答案 0 :(得分:5)
基本思路是首先获取文件扩展名部分和真实文件名部分,然后将文件名放入新字符串中。
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'))
答案 1 :(得分:3)
使用os.path.join()
提供完整路径名称:
os.rename(os.path.join(path, filename), os.path.join(name, newname))
您可以从任何目录运行程序。
您可以进一步简化您的计划:
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
语句。
答案 2 :(得分:1)
import glob, os
path = 'test/'# your path
extensions = ['.rtf', '.py', '.TEXT', '.text']
for file in glob.glob(os.path.join(path, '*.*')):
file_path, extension = os.path.splitext(file)
if extension in extensions:
new_file_name = '{0}.txt'.format(
os.path.basename(file_path)
)
if not new_file_name.startswith('file_'): # check if file allready has 'file_' at beginning
new_file_name = 'file_{0}'.format( # if not add
new_file_name
)
new_file = os.path.join(
os.path.dirname(file_path),
new_file_name
)
os.rename(file, new_file)
file_path, extension = os.path.splitext(file)
获取没有扩展名和扩展名的文件路径f.e ('dir_name/file_name_without_extension','.extension')
os.path.dirname(file_path)
获取目录f.e如果file_path是dir1/dir2/file.ext
,结果将为'dir1/dir2'
os.path.basename(file_path)
获取没有扩展名的文件名答案 3 :(得分:0)
- Api
- Assets
--> images
--> js
--> controllers
-->indexCtrl.js
--> dependencies
--> directives
--> services
--> app.js
--> styles
--> templates
--> views
- Config
- node_modules
- tasks
- views
-->index.ejs
使用数组存储所有旧扩展并迭代它们。