用Python读取目录中的文件名
我正在尝试制作一个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的地方使用(假设你只使用一次这个生成器;如果需要多次使用生成器,就得每次重新创建它。在这种情况下,除非内存真的成问题,否则使用列表的方法可能会更好)。