Самый простой способ чтения / записи содержимого файла в Python
в Ruby вы можете читать из файла с помощью s = File.read(filename)
. Самый короткий и ясный, который я знаю в Python-это
with file(filename) as f:
s = f.read()
есть ли другой способ сделать это, что делает его еще короче (предпочтительно одной линии) и более читабельным?
Примечание: первоначально я сформулировал вопрос как "делать это в одной строке кода". Как указал С. Лотт, более короткий не обязательно означает более читаемый. Поэтому я перефразировал свой вопрос, чтобы прояснить, что я имел в виду. Я думаю, что код Ruby лучше и более читаемый не обязательно потому, что это одна строка против двух (хотя это тоже имеет значение), но и потому, что это метод класса, а не метод экземпляра, который не ставит вопроса о том, кто закрывает файл, как убедиться, что он закрывается, даже если возникает исключение и т. д. Как указано в ответах ниже, вы можете полагаться на GC, чтобы закрыть свой файл (таким образом, это делает его однострочным), но это делает код хуже, даже если он короче. Не только будучи непереносимым, но и делая его непонятный.
8 ответов:
Если вы открыты для использования библиотек, попробуйте установить раздвоенный-путь (С easy_install или pip).
затем вы можете сделать:
from path import path s = path(filename).bytes()
эта библиотека довольно новая, но это вилка библиотеки, которая плавает вокруг Python в течение многих лет и была использована совсем немного. С тех пор как я нашел эту библиотеку много лет назад, я очень редко использую
os.path
илиopen()
больше.
использовать pathlib.
в Python 3.5 и выше:
from pathlib import Path contents = Path(file_path).read_text()
для более низких версий Python использовать pathlib2:
$ pip install pathlib2
затем
from pathlib2 import Path contents = Path(file_path).read_text()
писать так же просто:
Path(file_path).write_text('my text')
Это не Perl; вы не хотите принудительно помещать несколько строк кода на одну строку. Написать функцию, затем вызов функции занимает одну строку кода.
def read_file(fn): """ >>> import os >>> fn = "/tmp/testfile.%i" % os.getpid() >>> open(fn, "w+").write("testing") >>> read_file(fn) 'testing' >>> os.unlink(fn) >>> read_file("/nonexistant") Traceback (most recent call last): ... IOError: [Errno 2] No such file or directory: '/nonexistant' """ with open(fn) as f: return f.read() if __name__ == "__main__": import doctest doctest.testmod()