Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 子树中相同的文件名和不同的路径_Python_File_Directory - Fatal编程技术网

Python 子树中相同的文件名和不同的路径

Python 子树中相同的文件名和不同的路径,python,file,directory,Python,File,Directory,我需要创建指向目录(dir1)中文件的symbolik链接。每个文件都必须有一个SYMBOLK链接,如果有一个文件名相同但位于子文件夹中,我需要创建一个带有后缀的SYMBOLink。以下是一个例子: dir1包含exe1、sh1和bash文件。目录文件也包含文件bash以及文件file1、file2和file3 exe1 → dir1/exe1 sh1 → dir1/sh1 bash → dir1/bash bash1 → dir1/paper/bash file1 → dir1/paper/f

我需要创建指向目录(dir1)中文件的symbolik链接。每个文件都必须有一个SYMBOLK链接,如果有一个文件名相同但位于子文件夹中,我需要创建一个带有后缀的SYMBOLink。以下是一个例子: dir1包含exe1、sh1和bash文件。目录文件也包含文件bash以及文件file1、file2和file3

exe1 → dir1/exe1
sh1 → dir1/sh1
bash → dir1/bash
bash1 → dir1/paper/bash
file1 → dir1/paper/file1
file2 → dir1/paper/file2
file3 → dir1/paper/file3

代码是python。有人能帮我吗?

为什么不在创建新链接之前检查链接是否已经存在,并增加后缀,直到获得新的链接名

import os, sys

def maker(inputdir, outputdir, suffix=""):
    if not (chechdir(inputdir) and chechdir(outputdir)): sys.exit(0)
    for pos in os.listdir(inputdir):
        name =  os.path.abspath(inputdir+"/"+pos)
        if os.path.isdir(name):
            maker(name, outputdir, suffix+"1")
        else:
            simlnkname = os.path.abspath(outputdir+"/"+pos)
            if os.path.exists(simlnkname):
                simlnkname += suffix
            os.symlink(name, simlnkname)


def chechdir(directory):
    if not (os.path.exists(directory) and os.path.isdir(directory)):
        print "Error directory ", directory
        return False
    return True

if __name__ == "__main__":
    inp = "dir1"
    outp = "dir2"
    maker(inp, outp)
测试它:

$ tree
.
├── dir1
│   ├── bash
│   ├── exe1
│   ├── paper
│   │   ├── bash
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   └── sh1
├── dir2
└── test.py

3 directories, 8 files
$ python test.py 
$ tree
.
├── dir1
│   ├── bash
│   ├── exe1
│   ├── paper
│   │   ├── bash
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   └── sh1
├── dir2
│   ├── bash -> /home/miha/exampldir/dir1/bash
│   ├── bash1 -> /home/miha/exampldir/dir1/paper/bash
│   ├── exe1 -> /home/miha/exampldir/dir1/exe1
│   ├── file1 -> /home/miha/exampldir/dir1/paper/file1
│   ├── file2 -> /home/miha/exampldir/dir1/paper/file2
│   ├── file3 -> /home/miha/exampldir/dir1/paper/file3
│   └── sh1 -> /home/miha/exampldir/dir1/sh1
└── test.py

3 directories, 15 files

It概念,linux中的工作原理。因此,在运行它之前清理
outp
dir2
其他词)是有原因的。

到目前为止,您尝试了什么。任何一段代码或您已经编写/尝试过的东西??所以我知道您想要一些免费代码…我不想要免费代码,我只是不知道如何检查文件是否在子文件夹中多次出现,然后为我需要创建的符号链接添加后缀。如果
dir1/paper/
包含
exe1
,您想要什么结果?它
exe11
?@MichaelKazarian是的,没错!