[python] Python에서 파일 내용을 읽고 쓰는 가장 쉬운 방법

Ruby에서는 s = File.read(filename). 내가 파이썬에서 아는 가장 짧고 명확한 것은

with open(filename) as f:
    s = f.read()

더 짧고 (바람직하게는 한 줄) 더 읽기 쉽게 만드는 다른 방법이 있습니까?

참고 : 처음에는 질문을 “한 줄의 코드로 수행”이라고 표현했습니다. S.Lott가 지적했듯이, 짧다고해서 더 가독성이 좋은 것은 아닙니다. 그래서 나는 단지 내가 의미하는 바를 명확히하기 위해 내 질문을 다시 표현했습니다. 나는 Ruby 코드가 한 줄 대 두 줄이기 때문에 반드시 더 낫고 더 읽기 쉽다고 생각합니다 (그것도 중요하지만), 또한 누가 파일을 닫는 지에 대한 질문을 제기하지 않는 인스턴스 메서드와는 반대로 클래스 메서드이기 때문에, 아래 답변에서 지적했듯이 GC를 사용하여 파일을 닫을 수 있지만 (따라서 한 줄로 만드는) 코드가 더 나빠집니다. 더 짧지 만. 휴대가 불가능할뿐만 아니라 명확하지 않게 만드는 것입니다.



답변

라이브러리 사용에 개방적이라면 forked-path (easy_install 또는 pip 사용)를 설치해보십시오 .

그런 다음 다음을 수행 할 수 있습니다.

from path import path
s = path(filename).bytes()

이 라이브러리는 상당히 새롭지 만 수년 동안 Python 주위에 떠다니며 꽤 많이 사용 된 라이브러리의 포크입니다. 나는이 라이브러리 년 전 발견 이후, 나는 매우 드물게 사용하지 os.path또는 open()더 이상.


답변

with open('x.py') as f: s = f.read()

*** 웃음 ***


답변

위와 동일하지만 오류를 처리하지 않습니다.

s = open(filename, 'r').read()


답변

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')


답변

contents = open(filename).read()


답변

이것은 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()


답변

느리고 추하고 플랫폼에 따라 …하지만 한 줄짜리 😉

import subprocess

contents = subprocess.Popen('cat %s' % filename, shell = True, stdout = subprocess.PIPE).communicate()[0]