从带有python的目录中读取文件名

从带有python的目录中读取文件名,python,filenames,pygame,py2exe,distutils,Python,Filenames,Pygame,Py2exe,Distutils,我正在尝试制作一个pygame可执行文件。我将使用以下安装文件: from distutils.core import setup import py2exe setup( console = [ "game.py" ], author = "me", data_files = [ ( directory, [ file_1, file_2... ] ) ] ) 我已经在一个简单的游戏中使用了这个,但是我想要打包的游戏有超过700个图像文件。我的问题是,有没有一种简单的方法可以

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

from distutils.core import setup
import py2exe

setup( 
  console = [ "game.py" ],
  author = "me",
  data_files = [ ( directory, [ file_1, file_2... ] ) ]
)
我已经在一个简单的游戏中使用了这个,但是我想要打包的游戏有超过700个图像文件。我的问题是,有没有一种简单的方法可以从一个目录中读取所有文件名,这样我就不必单独列出每个文件名

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

谢谢你试试这个

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

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

import os

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

这将为您提供
root\u dir
中包含的每个子目录的文件(当然还有
root\u dir
本身中的文件)作为元组,格式为
[(dirpath1[file1,file2,…]),(dirpath2[file3,file4,…]),…]

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


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

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

然后,
data\u file\u gen
可以在迭代
data\u files
的任何地方使用(假设您只使用一次生成器;如果要多次使用生成器,则每次使用都必须重新创建生成器。在这种情况下,最好只使用list方法,除非内存出现问题。).

使用glob收集目录中的所有文件。使用。收集所有文件,或*.jpg收集所有.jpg文件。这将把图像放在py2exe输出目录中名为“images”的文件夹中

...
from glob import glob
...
data_files = [
        ("Stuff", glob(r'C:\projectfolder\Stuff\*.*')) 
        ,("dlls", glob(r'C:\projectfolder\dlls\*.dll'))                  
        ,("Images", glob(r'C:\projectfolder\images\*.*'))  
         ]  
...
setup(
name='ProjectName'
,options = options
,data_files=data_files
,console=['projectname.py']
)

这里,
data\u files=[(目录,[file\u 1,file\u 2…])
,a
[
似乎是多余的。请更正它。对于其他有此问题的人,也帮助我了解了安装脚本对数据的处理方式。\u文件工作得很有魅力。感谢所有回答的人。要使此工作正常,您需要包括os.path.isfile中列出的目录,假设它不是cwd。
dir='images'
 data_files+=[如果os.path.isfile(dir+file)中的文件对应于os.listdir(dir)中的文件]