从目录w/python读取文件名

2024-05-16 09:36:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

from distutils.core import setup
import py2exe

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

我已经让这个在一个简单的游戏上运行良好,但我想打包的游戏有700个图像文件。我的问题是,有没有一种简单的方法可以从目录中读取所有文件名,这样我就不必分别列出每个文件名了?

虽然有些文件是按顺序编号的,但大多数文件的根名称不同,因此不能选择编写循环来生成适当的字符串。

谢谢


Tags: 文件frompycoreimportgame可执行文件游戏
3条回答

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

试试这个

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
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中包含的每个子目录(当然还有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的任何地方使用(假设只使用一次生成器;如果生成器要多次使用,则每次使用都必须重新创建生成器。在这种情况下,最好使用list方法,除非内存确实成为问题)。

相关问题 更多 >