用Python读取目录中的文件名

5 投票
4 回答
16606 浏览
提问于 2025-04-16 21:26

我正在尝试制作一个pygame的可执行文件。我会使用以下的设置文件:

from distutils.core import setup
import py2exe

setup( 
  console = [ "game.py" ],
  author = "me",
  data_files = [ ( directory, [ file_1, file_2... ] ) ]
)

我在一个简单的游戏上已经成功了,但我想打包的这个游戏有超过700个图像文件。我的问题是,有没有简单的方法可以从一个文件夹里读取所有文件名,这样我就不需要一个一个列出它们?

虽然有一些文件是按顺序编号的,但大多数文件的名字都不一样,所以写一个循环来生成合适的字符串并不是一个可行的办法。

谢谢

相关问题:

4 个回答

4

试试这个

data_files = [directory, ...]  # whatever you want to put specifically.
data_files += [file for file in os.listdir('images') if os.path.isfile(file)]  # for adding your image files
6

os模块里面有一个叫做listdir的方法,它需要一个路径作为输入,然后会把这个路径下的所有内容以列表的形式返回给你。

7
import os

data_files = [(x[0], x[2]) for x in os.walk(root_dir)]

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

这个方法会给你返回一个包含所有子目录的文件列表,包括root_dir目录下的文件,结果是以元组的形式呈现,格式是[(dirpath1, [file1, file2, ...]), (dirpath2, [file3, file4, ...]), ...]

我之所以给你这个答案,是因为我假设(或者说希望)你在处理这么多文件的时候,能够把它们好好整理,而不是把所有文件都放在一个没有子目录的单一目录里。


虽然过了一段时间,但现在回过头来看,我意识到如果文件列表很长,使用生成器表达式可能会更高效。要做到这一点,只需要一个简单的改动:把外面的方括号换成圆括号,也就是:

import os
data_file_gen = ((x[0], x[2]) for x in os.walk(root_dir))

这样的话,data_file_gen就可以在需要遍历data_files的地方使用(假设你只使用一次这个生成器;如果需要多次使用生成器,就得每次重新创建它。在这种情况下,除非内存真的成问题,否则使用列表的方法可能会更好)。

撰写回答