该问题与递归重命名文件的answer有关。
更改为替换破折号的代码不适用于以下情况:
./Beginners Tools/Hello's -Trojans-/bif43243
./Linux/Nux Col - 1 Works (TEX & Pdf) - T'eouhsoe & More (33323 - 34432)
./Git/peepcode-git-mov/c6_branch_merge.mov
./haskell/OS 2007 - T aoue
./B Sites for Get-Big
它适用于以下案例:
./oeu'oeu - X ee ls - Feb 2008.pdf
所以我需要解析数据。我怎样才能正确替换破折号?
[详细]
代码来自链接,但已更改为替换“ - ”:
import os
for dirpath, dirs, files in os.walk(your_path):
for filename in files:
if '&' in filename:
os.rename(
os.path.join(dirpath, filename),
os.path.join(dirpath, filename.replace('-', '_'))
)
Python没有取代每一个破折号。我认为这是因为这些名称包含了早先停止脚本的特殊标志。所以我在archieving中遇到了错误:
tar cvzf sed_backup.tar.gz `find documents | sed s/\.*/\'\&\'/`
tar: rojans-: Cannot stat: No such file or directory
tar: Error is not recoverable: exiting now
由于名称中仍留有“'”和“ - ”符号,因此tar命令将“'”解释为find-command的结尾,将“ - ”解释为路径“./中的选项符号。初学者工具/ Hello's -Trojans- / bif43243“
答案 0 :(得分:2)
os.path.walk可以方便地遍历文件系统树,这是一个简单的例子:
import os, shutil
def rename_file(arg, dirname, filename):
filepath = os.path.join(dirname, filename)
# check if file meets your rename condition here
if os.path.isfile(filepath):
new_name = "something"
shutil.move(filepath, os.path.join(dirname, new_name)
os.path.walk(base_dir, rename_file, None)
此致 亚瑟
答案 1 :(得分:1)
很可能你的问题是单引号,括号和破折号。您可以逃脱它们或替换它们。
实际上看你的编辑,你链接到的原始代码是替换文件名中的字符而不是整个路径。您需要转义路径中的字符:
esc_dirpath = dirpath.replace('-','\-')
这相当简单,人们也可以使用正则表达式来逃避一组字符。
我建议在实际进行重命名之前运行那个os walk并在转义/替换这些字符之前和之后打印出特殊情况。
答案 2 :(得分:0)