我开始编写一个脚本来从linux os walk中删除非法字符。从文件开始,然后是文件夹。这是我到目前为止所拥有的 -
import sys
import os
import re
# List of illegal chars to run through to replace in the filesystem walk
chars = ['~', '*', '\\', ':', '<', '>', '|', '?', '"']
def ReplaceChars(value):
for c in chars:
value = value.replace(c, '')
return value
def RenamePath(path):
newFilePath = ReplaceChars(path)
os.rename(path, newFilePath)
def WalkFileSystem(dirroot):
# Main Walk Through File System
for root, dirs, files in os.walk(dirroot, topdown=False):
for name in files:
searchObj = re.search(r'[%s]' % ''.join(chars), os.path.join(root, name))
if searchObj:
RenamePath(os.path.join(root, name))
for name in dirs:
searchObj = re.search(r'[%s]' % ''.join(chars), os.path.join(root, name))
if searchObj:
RenamePath(os.path.join(root, name))
if __name__ == "__main__":
# Calls the WalkFileSystem Function
WalkFileSystem('/TestFolder/')
在某些情况下确实有效。问题是,如果我有像* test / os.rename这样的目录名称并不喜欢它,因为如果尝试重命名该目录下的文件,它就不会破坏路径中的那个通配符(我猜那就是问题)
两个问题 -
使用工作示例更新
import argparse
import os
import re
# List of illegal chars to run through to replace in the filesystem walk
chars = ['~', '*', '\\', ':', '<', '>', '|', '?', '"']
def ReplaceChars(value):
for c in chars:
value = value.replace(c, '')
return value
def RenamePath(root, path):
newFilePath = ReplaceChars(path)
os.rename(os.path.join(root, path), os.path.join(root, newFilePath))
def WalkFileSystem(dirroot):
# Main Walk Through File System
for root, dirs, files in os.walk(dirroot, topdown=False):
for name in dirs:
searchObj = re.search(r'[%s]' % ''.join(chars), name)
if searchObj:
RenamePath(root, name)
for name in files:
searchObj = re.search(r'[%s]' % ''.join(chars), name)
if searchObj:
RenamePath(root, name)
if __name__ == "__main__":
# Calls the WalkFileSystem Function
WalkFileSystem('/home/mpashby/Scripts/TestFolder/')
干杯,
答案 0 :(得分:0)
那是因为当你的脚本运行RenamePath时,它会做这样的事情:
>>> os.rename(str('/testdir/*test/h.txt'), '/testdir/test/h.txt')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory
您正尝试使用目前尚不存在的目录(/testdir/test/h.txt)重命名路径,因此您将收到错误
但是下面的一个工作正常。
>>> os.rename(str('/testdir/*test/h.txt'), '/testdir/*test/g.txt')
>>>
但是,您不需要任何特殊字符,因此,我先说先删除目录路径中的特殊字符,然后再对文件执行操作,这样,您就不会&#39;没有这样的文件或目录&#39;错误。