Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 - Fatal编程技术网

目录中的目录中的Python循环

目录中的目录中的Python循环,python,Python,我现在有在目录中循环的python代码,如果它在目录中找到另一个目录,那么它会进入目录中&再次循环它以获取目录中的所有文件。目录只遍历一个级别。代码如下: import io import sys, os import glob reload(sys) sys.setdefaultencoding("utf-8") directory = u"F:\\songs" count=0; songs = glob.glob(os.path.join(directory, u"*")) with

我现在有在目录中循环的python代码,如果它在目录中找到另一个目录,那么它会进入目录中&再次循环它以获取目录中的所有文件。目录只遍历一个级别。代码如下:

import io
import sys, os
import glob
reload(sys)
sys.setdefaultencoding("utf-8")

directory = u"F:\\songs"


count=0;
songs = glob.glob(os.path.join(directory, u"*"))
with io.open('filenames.txt', encoding='utf-8') as newnames:
    for filename in newnames:
        try:
            print directory + "\\" + songs[count]
            if "####" in filename:
                innersongs = glob.glob(os.path.join(directory, songs[count]))
                for innerfilename in innersongs:
                    print directory + "\\" + songs[count] + "\\" + innerfilename
                    os.rename(oldpath, newpath)
            else:
                print "hhy"
                os.rename(oldpath, newpath)
            count += 1
        except IOError as (errno, strerror):
            print "I/O error({0}): {1}".format(errno, strerror)
        except:
            print "Unexpected error:", sys.exc_info()[0]
            raise
上面是执行我提到的以下操作的代码。下面是重命名文件的文件名。文件名为filenames.txt

abcd sdfdd dfdcbv
####amcdn dfghfgn yrtyrt
@@@@abcdk eruifgf oirer
@@@@eprouri kdfjdkfd soieeure dlfkdl
@@@@weoerto oeruoture oitretre
@@@@ewpoire gkjdfkg sdfdsfl sdfsdhjfd
tieruoigd s,dfkdsjf dsfjbdjsf
dfrkewire dgngfkdgdf fdgkjdfg
gmfdghjfdhgdfg
dfgfdgdf skdfhds sdfhsdjhf sdfitertre
weikds dgkjksdf asouew sdfhds sdfj
上面是示例文件。在当前场景中,每当脚本在文件中获得
#####
时,脚本就会知道它是目录的名称,因此进入它&所有
@@@@@
都是内部目录中的目录或文件的名称。
@@@@
结束后,我们将退出内部目录循环&循环当前目录以更改文件名


但是我还是停留在内部循环中,在内部循环中移动&更改内部目录文件的名称。我在这里做错了什么?代码中还有什么可以改进的地方吗?

格式太奇怪了。我真的不明白它的用途,所以做一个粗略的猜测——我建议使用json,例如

要在Python中使用此选项,请执行以下操作:

tree.py 在本例中,
json.load
使用嵌套的
dict
s和
list
s将json转换为
dict
,因此您可以对它们进行迭代。此外,本示例基于递归–process_tree在处理父对象时调用自身来处理子对象
dict

其产出:

Renaming ./sdfdd to ./dfdcbv
Renaming ./skdfhds to ./sdfhsdjhf
Renaming amcdn/gkjdfkg to amcdn/sdfdsfl
Renaming amcdn/eruifgf to amcdn/oirer
Renaming amcdn/dfghfgn to amcdn/yrtyrt
Renaming amcdn/oeruoture to amcdn/oitretre
Renaming amcdn/kdfjdkfd to amcdn/soieeure
Renaming ./dgkjksdf to ./asouew
Renaming ./s,dfkdsjf to ./dsfjbdjsf
Renaming ./dgngfkdgdf to ./fdgkjdfg
再说一次,我真的不明白你的代码要做什么,所以我的代码有明显的局限性。具有空值的元素(例如空列表)将被忽略(
if val:
检查值是否为空)。如果元素值(
val
)不是
dict
,则根本不使用元素名称(
)(否则,它将成为前缀)。如果
列表
包含两个以上的元素,则仅使用前两个元素


无论如何,如果这稍微符合您的需要,您会更清楚如何重写此内容。:)

虽然我清楚地写下了所有内容,但我已经有了一个代码,可以将目录名读得更深一层&将名称以上述格式存储在
####
&
@@@
中,以便始终知道
###
是一个文件而不是一个目录,所以进入它里面&
@@@
是为了知道文件在内部目录中。那个剧本我已经完成了。现在我正在制作一个用于重命名的脚本。使用其他一些软件,我更改了everyfile的名称&以相同的顺序保存在一个特定的文件中。现在我想把更改后的名称放在完全相同的目录中。这就是我想要达到的目标。
Renaming ./sdfdd to ./dfdcbv
Renaming ./skdfhds to ./sdfhsdjhf
Renaming amcdn/gkjdfkg to amcdn/sdfdsfl
Renaming amcdn/eruifgf to amcdn/oirer
Renaming amcdn/dfghfgn to amcdn/yrtyrt
Renaming amcdn/oeruoture to amcdn/oitretre
Renaming amcdn/kdfjdkfd to amcdn/soieeure
Renaming ./dgkjksdf to ./asouew
Renaming ./s,dfkdsjf to ./dsfjbdjsf
Renaming ./dgngfkdgdf to ./fdgkjdfg