Python文件路径

时间:2012-06-14 21:50:51

标签: python escaping

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

为什么这段代码会使用双反斜杠生成它所做的输出?另外,鉴于我的目标,我的代码应该做些什么呢?

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

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

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]

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

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