从目录w/python中读取文件名

sab*_*ajt 3 python filenames pygame distutils py2exe

我正在尝试制作一个pygame可执行文件.我将使用以下安装文件:

from distutils.core import setup
import py2exe

setup( 
  console = [ "game.py" ],
  author = "me",
  data_files = [ ( directory, [ file_1, file_2... ] ) ]
)
Run Code Online (Sandbox Code Playgroud)

我已经让它在一个简单的游戏上工作得很好,但我想打包的游戏有> 700个图像文件.我的问题是,是否有一种简单的方法从目录中读取所有文件名,所以我不必单独列出每个文件名?

虽然有些文件按顺序编号,但大多数都有不同的根名称,因此编写一个生成相应字符串的循环不是一个选项.

谢谢

g.d*_*d.c 6

os模块有一个名为的方法listdir,该方法采用路径并将内容作为列表返回。


JAB*_*JAB 6

import os

data_files = [(x[0], x[2]) for x in os.walk(root_dir)]
Run Code Online (Sandbox Code Playgroud)

http://docs.python.org/library/os.html#os.walk

这将为您提供包含在root_dir其中的每个子目录(当然还包括其中的子目录)的文件root_dir作为格式的元组[(dirpath1, [file1, file2, ...]), (dirpath2, [file3, file4, ...]), ...]

我给你这个作为我的答案,因为我假设(或者更确切地说,希望)有这么多文件,你保持它们正确组织而不是将它们全部放在没有子目录的单个目录中.


已经有一段时间了,但回过头来看,我现在意识到,对于一长串文件,生成器表达式可能会更有效.要做到这一点,需要进行非常简单的改变; 用括号替换外括号,即

import os
data_file_gen = ((x[0], x[2]) for x in os.walk(root_dir))
Run Code Online (Sandbox Code Playgroud)

data_file_gen随后可用于任何data_files被遍历(假设你只使用发电机一次;如果发电机被多次使用,你就必须重新创建每次使用发电机在这种情况下,它可能是更好的只是使用list方法除非内存确实成为问题.)