我有两个功能。
def find()
和
def copy()
def find()-获取目录名称root和简单文件名(不带斜杠),并在以root为根的子树中搜索所有简单名称为target的文件。它打印出这些文件的绝对路径名列表。如果root不是有效的目录名称,则它应该显示一条消息并立即退出。
def copy()-它创建一个新目录newdir,并将找到的每个文件复制到该目录。复制文件的目标名称应为绝对路径名,并删除前导斜杠(/),并将所有其他斜杠替换为下划线()。如果newdir已经存在或由于某种原因无法创建,可以引发异常。
下面是我到目前为止解决该问题的代码。
运行它时,第10行出现错误
python3 find.py --copy zz /Desktop/test a.txt
AttributeError:“列表”对象没有属性“替换”
import sys
import os
import shutil
def copy(file, new_dir):
file_name = file[1:]
file_name = file_name.replace('/',"_")
file_path = os.path.join(new_dir,file_name)
shutil.copy(file,new_dir)
os.chdir(os.path.abspath(new_dir))
os.rename(list(os.path.split(file))[1],file_name)
def find(directory, filename):
l = []
for(dirname,subshere,fileshere) in os.walk(directory):
if filename in fileshere:
l.append(os.path.join(dirname,filename))
return l
def usage():
print ('usage: ./find.py [--copy dirname] root file')
def main():
if len(sys.argv) < 2: usage()
if sys.argv[1] == '--copy':
if len(sys.argv) < 5: usage()
new_dir = sys.argv[2]
root = sys.argv[3]
filename = sys.argv[4]
found = find(root,filename)
for f in found:
print(f)
copy(found,new_dir)
else:
if len(sys.argv) < 3: usage()
root = sys.argv[1]
filename = sys.argv[2]
found = find(root,filename)
for f in found:
print(f)
if __name__ == '__main__':
main()
还有其他使用替换的方法来摆脱替换中需要的字符吗?谢谢