1

我正在尝试构建一个简单的脚本,它必须能够浏览目录、子目录和子子目录,而我以前从未这样做过。

为什么这段代码会生成它所做的输出——带有双反斜杠?另外,考虑到我的目标,我的代码应该做什么?

我相信我的目标是保持单反斜杠,但我不确定。我所知道的是,我将在同一目录中的不同级别之间弹跳——进入子目录和子子目录。尝试进一步处理该程序,我相信我在尝试查找文件路径包含双反斜杠的文件时遇到了错误。

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']
4

2 回答 2

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.

于 2012-06-14T21:53:48.527 回答
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]

  1. thisDir 是 walk 正在检查的目录的字符串
  2. listDirs 是 thisDir 内的目录名称字符串列表
  3. listFiles 是 thisDir 中文件名字符串的列表

您可以迭代或处理返回的列表,然后取出您需要的任何内容。

于 2012-06-14T21:57:42.660 回答