2015-02-10 2 views
0

Мне было интересно, какие лучшие практики работают с путями в следующем сценарии: Я могу либо выбрать, чтобы изменить текущий каталог на нужную папку, а затем сгенерировать файл, используя только имя файла, или просто использовать полный путь.Изменить каталог Vs. полный путь

Вот код, где я установил текущий каталог os.chdir():

a=time.clock() 
import os 
for year in range(start,end): 
    os.chdir("C:/CO2/%s" % year) 
    with open("Table.csv",'r') as file: 
     content=file.read() 
b=time.clock() 
b-a 
Out[55]: 0.002037443263361638 

И это происходит медленнее, чем при использовании полного пути непосредственно:

a=time.clock() 
for year in range(start,end): 
    with open("C:/CO2/%s/Table.csv" % year,'r') as file: 
     content=file.read() 
b=time.clock() 
b-a 

Out[56]: 0.0014569102613677387 

Я до сих пор сомнения, хотя ли использование в полной мере путь - хорошая практика. Оба метода пересекают платформу? Должен ли я использовать os.path вместо% s?

+0

Я сомневаюсь, что установка абсолютной части 'C:/CO2 /' в ваш код - хорошая идея. Остальное не имеет значения. –

+1

Я бы использовал os.path.join –

+0

@LutzHorn, иногда я получаю путь с несогласованными разделителями косой черты, такой как C:/CD2 \\ 2001 Возможно, было бы лучше просто chdir для C:/CD2, а затем работать над файл? – multigoodverse

ответ

1

Как @ lutz-horn сказал, hardcoded путь не является хорошей идеей для любого кода, кроме однократных сценариев.

Говоря о дизайне, выбирайте методы, которые кажутся более явными и простыми для дальнейшей разработки, не оптимизируйте свой код до тех пор, пока время работы не станет проблемой.

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

2

В чем смысл использования кода? Это скрипт, который вызывается в командной строке пользователем? Если это так, я обычно беру путь в качестве аргумента командной строки (sys.argv) в качестве параметра командной строки (argparse) или используя какой-то файл конфигурации.

Или часть пути к файлу более универсального модуля? В этом случае я могу подумать об обертке пути и связанного кода в классе (class FooBar). Пользователи модуля могут передавать необходимую информацию о пути к файлу при создании экземпляра FooBar. Если пользователи, как правило, используют один и тот же путь снова и снова, я снова склоняюсь к стратегии, основанной на файле конфигурации.

В любом случае, путь к файлу будет отделен от кода - по крайней мере, для реальных проектов программного обеспечения.

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

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