我正在尝试构建一个简单的脚本,它必须能够浏览目录,子目录和子子目录,而我以前从未这样做过。
为什么这段代码会使用双反斜杠生成它所做的输出?另外,鉴于我的目标,我的代码应该做些什么呢?
我相信我的目标是保持单一的反斜杠,但我不确定。我所知道的是,我将在同一目录中的不同级别之间跳转 - 进入子目录和子子目录。试图进一步完成该程序,我相信我试图查找包含双反斜杠的文件路径的文件时遇到了错误。
import os, shutil, time
mdir = 'C:\\Users\Dev\Desktop\Python_Test'
dirlist = [(mdir + '\\' + i) for i in os.listdir(mdir) if os.path.isdir(os.path.join(mdir, i))]
print dirlist
输出:
['C:\\Users\\Dev\\Desktop\\Python_Test\\Dir 1',
'C:\\Users\\Dev\\Desktop\\Python_Test\\Dir 2']
答案 0 :(得分:4)
因为你在列表上调用print
,所以会出现双反斜杠,这会打印列表元素的repr
:
>>> l = ['C:\\Users\\Dev\\Desktop\\Python_Test\\Dir 1',
... 'C:\\Users\\Dev\\Desktop\\Python_Test\\Dir 2']
>>> for x in l:
... print(repr(x))
...
'C:\\Users\\Dev\\Desktop\\Python_Test\\Dir 1'
'C:\\Users\\Dev\\Desktop\\Python_Test\\Dir 2'
repr
也会给你围绕字符串的引号。我们的想法是repr
的输出(对于像str
这样的简单类型)可以直接反馈给Python解释器。要打印不带引号和单个反斜杠,请单独打印元素:
>>> for x in l:
... print(x)
...
C:\Users\Dev\Desktop\Python_Test\Dir 1
C:\Users\Dev\Desktop\Python_Test\Dir 2
与外界沟通时使用此表单。
顺便说一下,对于步行目录层次结构,使用os.walk
并使用os.path.join
来构建路径。
答案 1 :(得分:0)
使用os.walk内在函数。太棒了!
>>> import os
>>> os.walk('.')
<generator object walk at 0x163891E8>
>>> listWalk = []
>>> for items in os.walk('.'):
... listWalk.append(items)
...
>>> listWalk
listWalk现在将包含一个由3部分组成的项目列表:[thisDir,listDirs,listFiles]
您可以迭代或处理返回的列表,并提取您需要的任何内容。