Jef*_*eff 401 python file-io file-rename
我正在尝试使用Python重命名目录中的一些文件.
假设我有一个调用的文件,CHEESE_CHEESE_TYPE.***并希望删除CHEESE_所以我的结果文件名将是CHEESE_TYPE
我正在尝试使用os.path.split它,但它无法正常工作.我也考虑过使用字符串操作,但也没有成功.
Mes*_*ssa 633
使用os.rename(src, dst)重命名或移动文件或目录.
$ ls
cheese_cheese_type.bar cheese_cheese_type.foo
$ python
>>> import os
>>> for filename in os.listdir("."):
... if filename.startswith("cheese_"):
... os.rename(filename, filename[7:])
...
>>>
$ ls
cheese_type.bar cheese_type.foo
Run Code Online (Sandbox Code Playgroud)
buk*_*zor 37
这是基于您最新评论的脚本.
#!/usr/bin/env python
from os import rename, listdir
badprefix = "cheese_"
fnames = listdir('.')
for fname in fnames:
if fname.startswith(badprefix*2):
rename(fname, fname.replace(badprefix, '', 1))
Run Code Online (Sandbox Code Playgroud)
Yog*_*han 19
以下代码应该有效.它接受当前目录中的每个文件名,如果文件名包含模式CHEESE_CHEESE_,则重命名.如果没有对文件名做任何事情.
import os
for fileName in os.listdir("."):
os.rename(fileName, fileName.replace("CHEESE_CHEESE_", "CHEESE_"))
Run Code Online (Sandbox Code Playgroud)
dar*_*elf 15
假设您已经在目录中,并且评论中的"前8个字符"始终为true.(虽然"CHEESE_"是7个字符......?如果是这样,将下面的8改为7)
from glob import glob
from os import rename
for fname in glob('*.prj'):
rename(fname, fname[8:])
Run Code Online (Sandbox Code Playgroud)
Azi*_*lto 11
我有同样的问题,我想将 in any pdf file to a dash -.但文件位于多个子目录中.所以,我不得不使用os.walk().对于多个子目录,可能是这样的:
import os
for dpath, dnames, fnames in os.walk('/path/to/directory'):
for f in fnames:
os.chdir(dpath)
if f.startswith('cheese_'):
os.rename(f, f.replace('cheese_', ''))
Run Code Online (Sandbox Code Playgroud)
试试这个:
import os
import shutil
for file in os.listdir(dirpath):
newfile = os.path.join(dirpath, file.split("_",1)[1])
shutil.move(os.path.join(dirpath,file),newfile)
Run Code Online (Sandbox Code Playgroud)
我假设您不想删除文件扩展名,但您可以使用句点进行相同的拆分.
这种东西非常适合IPython,它具有shell集成.
In [1] files = !ls
In [2] for f in files:
newname = process_filename(f)
mv $f $newname
Run Code Online (Sandbox Code Playgroud)
注意:要将其存储在脚本中,请使用.ipy扩展名,并为所有shell命令添加前缀!.
另见:http://ipython.org/ipython-doc/stable/interactive/shell.html
这是一个更通用的解决方案:
此代码可用于从目录中的所有文件名中递归删除任何特定字符或字符集,并将其替换为任何其他字符,字符集或不包含任何字符。
import os
paths = (os.path.join(root, filename)
for root, _, filenames in os.walk('C:\FolderName')
for filename in filenames)
for path in paths:
# the '#' in the example below will be replaced by the '-' in the filenames in the directory
newname = path.replace('#', '-')
if newname != path:
os.rename(path, newname)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
585079 次 |
| 最近记录: |