[英]read file names from directory w/ python
我正在嘗試使 pygame 可執行。 我將使用以下設置文件:
from distutils.core import setup
import py2exe
setup(
console = [ "game.py" ],
author = "me",
data_files = [ ( directory, [ file_1, file_2... ] ) ]
)
我已經讓它在一個簡單的游戲上正常工作,但我想要 package 的游戲有 > 700 個圖像文件。 我的問題是,有沒有一種簡單的方法可以從目錄中讀取所有文件名,這樣我就不必單獨列出每個文件名了?
雖然有些文件是按順序編號的,但大多數文件都有不同的根名稱,因此編寫一個生成適當字符串的循環不是一種選擇。
謝謝
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
(假設您只使用生成器一次;如果要多次使用生成器,則必須為每次使用重新創建生成器。在這種情況下,它可能會更好只使用列表方法,除非 memory 確實成為問題。)。
嘗試這個
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
的方法,它接受路徑並將內容作為列表返回。
使用 glob 收集目錄中的所有文件。 使用. 收集所有文件,或 *.jpg 收集所有.jpg 文件。 這會將圖像放在 py2exe output 目錄中名為“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']
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.