2012-02-23 2 views
1

Мне нужно создать неизвестное количество переменных python, основанное на списке файлов в папке.Использование глобального словаря для создания переменных

я обнаружил, что я мог бы использовать глобальный словарь для создания и инициализации этих переменных:

# libraries import 
import os.path 
import glob 
import numpy as np 

# list of all the text files in the folder 
list = glob.glob("*.txt") 

# creation of the variables based on the name of each file 
for file in list: 
    shortname = os.path.splitext(file)[0] 
    globals()[shortname] = np.loadtxt(file) 

Однако, мне было интересно, если это было хорошая практика, чтобы получить доступ к глобальному словарю для присваивания значения переменного в Python (когда мы не знаем числа и имя переменных заранее), или если был альтернативный метод предпочтительнее.

+4

[Сохранять данные из ваших имен переменных.] (Http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html) –

+4

Лучше не использовать «список» в качестве имени переменной. Он скроет встроенный список. –

+1

Как вы планируете получать доступ к этим переменным позже, учитывая, что у вас нет их имен заранее? Также через вызов globals()? Почему бы просто не использовать обычный словарь? –

ответ

4

Вы должны использовать специальный словарь для этого:

files = {f: np.loadtxt(f) for f in glob.glob("*.txt")} 

Как правило, не следует смешивать данные и переменную или имена атрибутов. Ваш код может затенять любой встроенный Python, если существует файл с тем же именем.

+0

спасибо, он отлично работает. Я просто сделал небольшую модификацию кода, чтобы не иметь «.txt» в имени переменной: files = {f [: - 4]: np.loadtxt (f) для f в glob.glob ("*. Txt ")} – gcalmettes

+1

@gcalmettes: instea of ​​the f [: - 4]' вы можете использовать 'os.path.splitext' для разделения расширения. Не то, чтобы это имело значение, но мне кажется, что он мне подходит. – katrielalex

2

Нет, вы, вероятно, не должны использовать глобальные переменные для этого. Вместо этого создайте словарь или класс и сохраните в нем значения.

Смежные вопросы