2016-11-06 2 views
2

Я пытаюсь очистить свой код немного, и у меня есть проблема, выясняя, какой из этих 2 способов считается наиболее вещий одинКаков самый pythonic способ открыть файл?

import os 

dir = os.path.dirname(__file__) 
str1 = 'filename.txt' 
f = open(os.path.join(dir,str1),'r') 

Хотя второй, кажется, чистейший один, я считаю Объявление fullPath слишком много, поскольку оно будет использоваться только один раз.

import os 

dir = os.path.dirname(__file__) 
str1 = 'filename.txt' 
fullPath = os.path.join(dir,str1) 
f = open(fullPath,'r') 

В целом, лучше ли избежать вызова функций внутри другого вызова, даже если он добавляет строку кода?

+1

Это действительно не имеет значения. Ни один из них не является более «питоническим». Вы должны делать это независимо от того, какой вы предпочитаете. Что бы вы ни делали, следуйте советам Януки и используйте 'with'. Это гораздо важнее вопроса о том, следует ли использовать временную переменную или нет. Лично в таком простом случае я бы пошел без переменной temp. –

+0

Благодарим за ответ! – Faeralis

+0

Другим способом взглянуть на это было бы ", которое, по вашему мнению, делает код более удобочитаемым?" В случае с более сложным выражением он может определенно помочь использовать временную переменную для уточнения кода. В этом конкретном коде это не имеет большого значения, поскольку это так просто в любом случае. –

ответ

6
with open('file path', 'a') as f: 
    data = f.read() 
    #do something with data 

или

f = open(os.path.join(dir,str1),'r') 
f.close() 
+0

Спасибо за ответ, но это не то, что я ищу. Мне интересно, следует ли мне называть 'os.path.join()' внутри 'open()' вызов или определять переменную за пределами – Faeralis

+1

Возможно, вам стоит упомянуть, что для второй опции требуется 'f.close()' файл в какой-то момент или риск сохранения указателей файлов. – Soviut

+0

@ Совиут отметил. Спасибо –

1
file = open('newfile.txt', 'r') 

for line in file: 

     print line 

ИЛИ

lines = [line for line in open('filename')] 

Если файл огромен, чтения() является окончательно плохая идея, так как она загружает (без параметра размера), целое файл в память.

Если ваш файл огромен, это вызовет латентность!

Итак, я не рекомендую читать() или readlines()

+0

Правильно отформатируйте код в своем ответе. – Soviut

+0

Готово! Я новичок в сообществе, поэтому я не знаю всех форматов и стиля. Есть ли какие-либо рекомендации? Спасибо заранее – anati