目录中的目录中的Python循环
我现在有在目录中循环的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
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