簡體   English   中英

從帶有 python 的目錄中讀取文件名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM