2017-11-02 19 views
1

ファイルパスとファイル名を含む文字列のリストを取得しようとしています。 現時点では、私はリストにファイル名だけを取得します。ファイルパス+ファイル名をリストに入れる方法は?

コード:

hamFileNames = os.listdir("train_data\ham") 

出力:私はこのような出力をしたいと思う

['0002.1999-12-13.farmer.ham.txt', 
'0003.1999-12-14.farmer.ham.txt', 
'0005.1999-12-14.farmer.ham.txt'] 

['train_data\ham\0002.1999-12-13.farmer.ham.txt', 
'train_data\ham\0003.1999-12-14.farmer.ham.txt', 
'train_data\ham\0005.1999-12-14.farmer.ham.txt'] 

答えて

1

あなたは、単に行うことができ、ディレクトリ・パスへのアクセス権を持っているので、 :

dir = "train_data\ham" 
output = map(lambda p: os.path.join(dir, p), os.listdir(dir)) 

または単純os.path.joinが、その中のファイル名とディレクトリ・パスに参加します

output = [os.path.join(dir, p) for p in os.listdir(dir)] 

。これもできます

hamFileNames = [entry.path for entry in os.scandir(r"train_data\ham")] 

+0

https://stackoverflow.com/a/11058554/8586227も参照してください。 –

0

あなたは、Python 3.5以上にしている場合は、両方のより効率的であり、あなたのために仕事しos.listdirin favor of os.scandir、スキップ(pathは、結果オブジェクトの属性です)あなたは安価に(scandirには無料でファイル情報が含まれていますが、stat-ファイルはありません)。ファイルのみ(なしディレクトリや特殊なファイル・システム・オブジェクト)維持するために:

hamFileNames = [entry.path for entry in os.scandir(r"train_data\ham") if entry.is_file()] 

あなたは下の3.4またはにしている場合は、あなたが以前のPythonで同じAPIを提供しては、PyPI scandirモジュール(を見てみたいことがあり)。

また、パスに生の文字列を使用しました。 \hはそれがなくても動作しますが、は常にになります。"train_data\foo"\fはASCII形式のフィード文字です)を使用しようとすると厄介なショックを受けます。r"train_data\foo"はちょうど動作します(rの接頭辞は引用文字以外のもののバックスラッシュ補間を防止するため)。

関連する問題