1

ディレクトリ、サブディレクトリ、およびサブサブディレクトリをナビゲートできる必要がある単純なスクリプトを作成しようとしていますが、これまでに行ったことはありません。

なぜこのコードは、2 つのバックスラッシュを使用して出力を生成するのでしょうか? また、私の目的を考えると、私のコードは何をすべきでしょうか?

私の目的は単一のバックスラッシュを維持することだと思いますが、確信が持てません。私が知っているのは、同じディレクトリ内の異なるレベル間、つまりサブディレクトリとサブサブディレクトリにバウンスすることだけです。プログラムをさらに調べてみると、二重のバックスラッシュを含むファイルパスを持つファイルを検索しようとすると、エラーが発生していると思います。

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 には、[thisDir、listDirs、listFiles] の 3 つの部分からなる項目のリストが含まれます。

  1. thisDir は、ウォークが調べているディレクトリの文字列です
  2. listDirs は、thisDir 内のディレクトリ名の文字列のリストです
  3. listFiles は thisDir 内のファイル名の文字列のリストです

返されたリストを反復または処理して、必要なものをすべて取り出すことができます。

于 2012-06-14T21:57:42.660 に答える