source

파일을 한 줄 한 줄 목록으로 읽는 방법

factcode 2022. 9. 4. 14:30
반응형

파일을 한 줄 한 줄 목록으로 읽는 방법

Python에서 파일의 모든 행을 읽고 각 행을 목록의 요소로 저장하는 방법은 무엇입니까?

파일을 한 줄씩 읽고 목록 끝에 한 줄씩 추가하고 싶습니다.

이 코드는 파일 전체를 메모리로 읽어 들여 각 행의 끝에서 모든 공백 문자(새 줄과 공백)를 삭제합니다.

with open(filename) as file:
    lines = file.readlines()
    lines = [line.rstrip() for line in lines]

대용량 파일을 사용하는 경우 대신 파일을 읽고 한 줄씩 처리해야 합니다.

with open(filename) as file:
    for line in file:
        print(line.rstrip())

Python 3.8 이상에서는 다음과 같이 while loop을 바다코끼리 사용할 수 있습니다.

with open(filename) as file:
    while (line := file.readline().rstrip()):
        print(line)

파일의 처리 방법 및 인코딩 방법에 따라 액세스 모드 및 문자 인코딩을 수동으로 설정할 수도 있습니다.

with open(filename, 'r', encoding='UTF-8') as file:
    while (line := file.readline().rstrip()):
        print(line)

입력출력 참조:

with open('filename') as f:
    lines = f.readlines()

또는 줄 바꿈 문자를 삭제합니다.

with open('filename') as f:
    lines = [line.rstrip() for line in f]

이것은 필요 이상으로 명확하지만, 당신이 원하는 대로 할 수 있습니다.

with open("file.txt") as file_in:
    lines = []
    for line in file_in:
        lines.append(line)

이렇게 하면 파일에서 "배열" 행이 생성됩니다.

lines = tuple(open(filename, 'r'))

open을 사용법파일을 반복하면 해당 파일에서 행을 얻을 수 있습니다. tuple는 반복기를 사용하여 지정한 반복기에서 태플인스턴스를 인스턴스화할 수 있습니다. lines는 파일의 행에서 작성된 태플입니다.

Python의 Methods of File Objects에 따르면 텍스트 파일을 변환하는 가장 간단한 방법은list 말합니다

with open('file.txt') as f:
    my_list = list(f)
    # my_list = [x.rstrip() for x in f] # remove line breaks

텍스트 파일 행에서 반복해야 하는 경우 다음을 사용할 수 있습니다.

with open('file.txt') as f:
    for line in f:
       ...

오래된 답변:

「」를 사용합니다.with ★★★★★★★★★★★★★★★★★」readlines():

with open('file.txt') as f:
    lines = f.readlines()

파일 닫기에 관심이 없는 경우 다음 한 줄만 사용할 수 있습니다.

lines = open('file.txt').readlines()

기존 방식:

f = open('file.txt') # Open file on read mode
lines = f.read().splitlines() # List with stripped line-breaks
f.close() # Close file

「 」를 \n★★★★

with open(fname) as f:
    content = f.readlines()

않으면\n★★★★

with open(fname) as f:
    content = f.read().splitlines()

제안하신 대로 다음 작업을 간단히 수행할 수 있습니다.

with open('/your/path/file') as f:
    my_lines = f.readlines()

이 방법에는 두 가지 단점이 있습니다.

1) 모든 행을 메모리에 저장합니다.일반적인 경우, 이것은 매우 나쁜 생각이다.파일이 매우 크고 메모리가 부족할 수 있습니다.크지는 않더라도 단순히 기억의 낭비일 뿐이다.

2) 각 행을 읽을 때 처리할 수 없습니다.따라서 이 후 회선을 처리하면 효율이 떨어집니다(1개가 아닌2개의 패스가 필요).

일반적인 경우에 더 나은 접근법은 다음과 같습니다.

with open('/your/path/file') as f:
    for line in f:
        process(line)

원하는 방식으로 프로세스 기능을 정의할 수 있습니다.예를 들어 다음과 같습니다.

def process(line):
    if 'save the world' in line.lower():
         superman.save_the_world()

( )의 실장Superman

이것은 모든 파일 사이즈에 적합하게 동작하며, 1패스만으로 파일을 처리할 수 있습니다.일반적인 파서는 다음과 같이 동작합니다.

텍스트 파일 내용:

line 1
line 2
line 3

위의 txt와 동일한 디렉토리에서 이 Python 스크립트를 사용할 수 있습니다.

>>> with open("myfile.txt", encoding="utf-8") as file:
...     x = [l.rstrip("\n") for l in file]
>>> x
['line 1','line 2','line 3']

추가 사용:

x = []
with open("myfile.txt") as file:
    for l in file:
        x.append(l.strip())

또는 다음 중 하나를 선택합니다.

>>> x = open("myfile.txt").read().splitlines()
>>> x
['line 1', 'line 2', 'line 3']

또는 다음 중 하나를 선택합니다.

>>> x = open("myfile.txt").readlines()
>>> x
['linea 1\n', 'line 2\n', 'line 3\n']

또는 다음 중 하나를 선택합니다.

def print_output(lines_in_textfile):
    print("lines_in_textfile =", lines_in_textfile)

y = [x.rstrip() for x in open("001.txt")]
print_output(y)

with open('001.txt', 'r', encoding='utf-8') as file:
    file = file.read().splitlines()
    print_output(file)

with open('001.txt', 'r', encoding='utf-8') as file:
    file = [x.rstrip("\n") for x in file]
    print_output(file)

출력:

lines_in_textfile = ['line 1', 'line 2', 'line 3']
lines_in_textfile = ['line 1', 'line 2', 'line 3']
lines_in_textfile = ['line 1', 'line 2', 'line 3']

파일을 목록으로 읽으려면 다음 세 가지 작업을 수행해야 합니다.

  • 파일을 엽니다.
  • 파일을 읽다
  • 내용을 목록으로 저장

다행히 Python은 이러한 작업을 매우 쉽게 수행할 수 있으므로 파일을 목록으로 읽는 가장 빠른 방법은 다음과 같습니다.

lst = list(open(filename))

하지만 설명을 좀 더 덧붙이겠습니다.

파일 열기

특정 파일을 열고 싶은 경우 파일 핸들(또는 파일 같은 핸들)을 직접 다루지 않을 것입니다.Python에서 파일을 열 때 가장 일반적으로 사용되는 함수는 Python 2.7에서 하나의 필수 인수와 두 개의 선택적 인수가 필요합니다.

  • 파일명
  • 모드
  • 버퍼링(이 답변에서는 이 인수를 무시합니다)

파일명은 파일의 경로를 나타내는 문자열이어야 합니다.예를 들어 다음과 같습니다.

open('afile')   # opens the file named afile in the current working directory
open('adir/afile')            # relative path (relative to the current working directory)
open('C:/users/aname/afile')  # absolute path (windows)
open('/usr/local/afile')      # absolute path (linux)

파일 확장자를 지정해야 합니다.합니다.파일 는 Windows와 같은 파일 확장자가 있기 입니다..txt ★★★★★★★★★★★★★★★★★」.doc, 등은 탐색기에서 볼 때 기본적으로 숨겨집니다.

는 " " 입니다.mode은 ,,,,,,,,입니다.r기본적으로는 "읽기 전용"을 의미합니다.그게 바로 네 경우에 필요한 거야.

그러나 실제로 파일을 만들거나 파일에 쓰려면 여기서 다른 인수가 필요합니다.개요를 원하시면 훌륭한 답변이 있습니다.

는 '아, 아, 아, 아, 맞다'를 생략할 수 있습니다.mode이치노

open(filename)
open(filename, 'r')

이랬다는, 의 바이너리 파일 모드를 .rb:

open(filename, 'rb')

에서는 른른 on on on on on'b'을 사용하다


하는지 open 항상 한 것은, 라고 하는 해 봅시다.close할 때까지) 에 대한 합니다.그렇지 않으면 프로세스가 종료될 때까지(또는 Python이 파일핸들을 폐기할 때까지) 파일에 열려 있는 파일핸들을 유지합니다.

다음을 사용할 수 있습니다.

f = open(filename)
# ... do stuff with f
f.close()

이 that between between between between between between between between between between가 있을 때 파일을 닫을 수 .open ★★★★★★★★★★★★★★★★★」close예외가 발생합니다. 수 것은, 「이것」을 입니다.try ★★★★★★★★★★★★★★★★★」finally:

f = open(filename)
# nothing in between!
try:
    # do stuff with f
finally:
    f.close()

Python은 더 구문을 단, "Python"의 경우).opentry ★★★★★★★★★★★★★★★★★」finally②) :

with open(filename) as f:
    # do stuff with f
# The file is always closed after the with-scope ends.

마지막 방법은 Python에서 파일을 열 때 권장되는 방법입니다!

파일 읽기

좋아요, 파일을 열었군요. 이제 어떻게 읽죠?

open함수는 개체를 반환하고 Pythons 반복 프로토콜을 지원합니다.각 반복에는 다음 행이 표시됩니다.

with open(filename) as f:
    for line in f:
        print(line)

이치노, 각 문자 「」, 「」가 .\n마지막에 (Python이 범용 줄바꿈으로 구축되어 있는지 확인하고 싶을 수도 있습니다.그렇지 않으면,\r\n windowsた 는\r(Mac에서는 새로운 회선으로 표시됩니다).원하지 않는 경우 마지막 문자(또는 Windows의 마지막 두 문자)를 제거할 수 있습니다.

with open(filename) as f:
    for line in f:
        print(line[:-1])

그러나 마지막 줄에 반드시 줄바꿈이 있는 것은 아니기 때문에 그것을 사용하지 않는 것이 좋습니다.후행 줄바꿈으로 끝나는지 확인하고, 만약 그렇다면 제거할 수 있습니다.

with open(filename) as f:
    for line in f:
        if line.endswith('\n'):
            line = line[:-1]
        print(line)

, 모든 「」를 포함한다)은할 수 .\ncharacter)는 문자열의 끝에서 다른 모든 후행 공백도 삭제되므로 다음 사항이 중요한 경우 주의해야 합니다.

with open(filename) as f:
    for line in f:
        print(f.rstrip())

, 이 ,로 끝나는 음음음음음 however however however however however however however\r\n ( "newlines").rstrip()또, 관리도 합니다.\r!

내용을 목록으로 저장

이제 파일을 열고 읽는 방법을 알았으니 내용을 목록에 저장할 차례입니다.가장 간단한 옵션은 다음 함수를 사용하는 것입니다.

with open(filename) as f:
    lst = list(f)

후행 줄 바꿈을 제거하는 경우 대신 목록 이해를 사용할 수 있습니다.

with open(filename) as f:
    lst = [line.rstrip() for line in f]

또는 보다 심플하게:의 방법file으로 a를 합니다.list[ ] :

with open(filename) as f:
    lst = f.readlines()

줄바꿈 문자를 합니다. 원하지 않는 경우 다음 문자를 권장합니다.[line.rstrip() for line in f]메모리내의 모든 행을 포함한 2개의 리스트가 유지되는 것을 피하기 위해서입니다.

원하는 출력을 얻기 위한 추가 옵션이 있지만 "최적"이 아닙니다. 즉, 파일을 문자열로 완성한 다음 새 줄로 분할하는 것입니다.

with open(filename) as f:
    lst = f.read().split('\n')

또는 다음과 같이 입력합니다.

with open(filename) as f:
    lst = f.read().splitlines()

경우 됩니다. 뒷줄은 뒷줄로 되어 있기 때문입니다.split문자는 포함되지 않습니다.그러나 파일을 문자열 및 줄 목록으로 메모리에 보관하기 때문에 이상적인 파일은 아닙니다.

요약

  • with open(...) as f사용자가 직접 파일을 닫을 필요가 없고 일부 예외가 발생하더라도 파일이 닫히므로 파일을 열 때 사용합니다.
  • file한 읽을 수 .for line in the_file_object:.
  • 사용 가능한 함수/클래스는 항상 설명서를 참조하십시오.대부분의 경우, 그 일에 완벽한 일치가 있거나 적어도 한두 가지 좋은 일이 있습니다.은 '네'가 될 것입니다.readlines()단, 리스트에 저장하기 전에 행을 처리하고 싶다면 간단한 목록 이해를 권장합니다.

파일 행을 목록으로 읽는 깔끔하고 피토닉한 방법


무엇보다도 파일을 열고 내용을 효율적으로 읽는 데 집중해야 합니다.다음은 제가 개인적으로 선호하지 않는 방법의 예입니다.

infile = open('my_file.txt', 'r')  # Open the file for reading.

data = infile.read()  # Read the contents of the file.

infile.close()  # Close the file since we're done using it.

대신, 읽기 및 쓰기 모두 파일을 여는 방법은 매우 깔끔하고, 파일을 사용한 후 닫는 추가 단계가 필요하지 않기 때문에 아래 방법을 선호합니다.아래 설명에서는 파일을 읽기 위해 열고 변수 'infile'에 할당합니다.이 문의 코드 실행이 완료되면 파일은 자동으로 닫힙니다.

# Open the file for reading.
with open('my_file.txt', 'r') as infile:

    data = infile.read()  # Read the contents of the file into memory.

이제 이 데이터는 반복 가능하고 효율적이며 유연하기 때문에 Python List에 포함시키는 데 주력해야 합니다.이 경우 텍스트 파일의 각 행을 개별 요소로 가져오는 것이 목적입니다.이를 위해 다음과 같이 splitlines() 메서드를 사용합니다.

# Return a list of the lines, breaking at line boundaries.
my_list = data.splitlines()

최종 제품:

# Open the file for reading.
with open('my_file.txt', 'r') as infile:

    data = infile.read()  # Read the contents of the file into memory.

# Return a list of the lines, breaking at line boundaries.
my_list = data.splitlines()

코드 테스트:

  • 텍스트 파일의 내용:
     A fost odatã ca-n povesti,
     A fost ca niciodatã,
     Din rude mãri împãrãtesti,
     O prea frumoasã fatã.
  • 테스트용 스테이트먼트 인쇄:
    print my_list  # Print the list.

    # Print each line in the list.
    for line in my_list:
        print line

    # Print the fourth element in this list.
    print my_list[3]
  • 출력(Unicode 문자로 인해 다르게 표시):
     ['A fost odat\xc3\xa3 ca-n povesti,', 'A fost ca niciodat\xc3\xa3,',
     'Din rude m\xc3\xa3ri \xc3\xaemp\xc3\xa3r\xc3\xa3testi,', 'O prea
     frumoas\xc3\xa3 fat\xc3\xa3.']

     A fost odatã ca-n povesti, A fost ca niciodatã, Din rude mãri
     împãrãtesti, O prea frumoasã fatã.

     O prea frumoasã fatã.

Python 3.4에서 소개된 에서는 다음과 같이 파일에서 텍스트를 읽을 때 매우 편리한 방법이 있습니다.

from pathlib import Path
p = Path('my_text_file')
lines = p.read_text().splitlines()

(the)splitlines의 행 입니다.call은 파일의 모든 내용을 하는 문자열입니다.

pathlib편리하고 간결하며 파일 여닫기를 걱정할 필요가 없습니다.파일을 한 번에 모두 읽는 것만으로 충분하다면 좋은 선택입니다.

파일 목록 압축을 사용하여 다음 옵션을 하나 더 소개합니다.

lines = [line.rstrip() for line in open('file.txt')]

대부분의 작업이 Python 인터프리터 안에서 이루어지기 때문에 이 방법이 더 효율적일 것입니다.

f = open("your_file.txt",'r')
out = f.readlines() # will append in the list out

여기서 변수 출력은 원하는 목록(배열)입니다.다음 중 하나를 수행할 수 있습니다.

for line in out:
    print (line)

또는 다음 중 하나를 선택합니다.

for line in f:
    print (line)

같은 결과를 얻을 수 있습니다.

다른 옵션은 다음과 같습니다.

import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter="\n")

하면 ★★★★★★★★★★★★★★★★★★★.dataNumPy는 NumPy를 사용합니다.

Python 2 및 Python 3으로 텍스트 파일 읽기 및 쓰기, Unicode와 연동

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Define data
lines = ['     A first string  ',
         'A Unicode sample: €',
         'German: äöüß']

# Write text file
with open('file.txt', 'w') as fp:
    fp.write('\n'.join(lines))

# Read text file
with open('file.txt', 'r') as fp:
    read_lines = fp.readlines()
    read_lines = [line.rstrip('\n') for line in read_lines]

print(lines == read_lines)

주의사항:

  • with이른바 컨텍스트 매니저입니다.열려 있던 파일이 다시 닫힙니다.
  • .strip() ★★★★★★★★★★★★★★★★★」.rstrip()lines흰 공간도 벗겨내니까

공통 파일 끝

.txt

보다 고도의 파일 쓰기/읽기

사용하시는 어플리케이션에서는 다음 사항이 중요할 수 있습니다.

  • 다른 프로그래밍 언어 지원
  • 읽기/쓰기 성능
  • 콤팩트성(파일 크기)

다음 항목도 참조하십시오.데이터 시리얼화 포맷 비교

컨피규레이션파일을 만드는 방법을 찾고 있는 경우는, 제 짧은 기사 Configuration files in Python을 읽어보시기 바랍니다.

"stdin" 을 할 .fileinput★★★★

# reader.py
import fileinput

content = []
for line in fileinput.input():
    content.append(line.strip())

fileinput.close()

다음과 같이 파일을 전달합니다.

$ python reader.py textfile.txt 

자세한 내용은 이쪽:http://docs.python.org/2/library/fileinput.html

가장 간단한 방법

간단한 방법은 다음과 같습니다.

  1. 파일 전체를 문자열로 읽다
  2. 문자열을 한 줄씩 분할합니다.

한마디로 다음과 같은 결과를 얻을 수 있는 것은 다음과 같습니다.

lines = open('C:/path/file.txt').read().splitlines()

그러나 이 방법은 2가지 버전의 콘텐츠를 메모리에 저장하기 때문에 매우 비효율적입니다(작은 파일에는 큰 문제가 없을 수 있지만 여전히 마찬가지입니다.[마크 에머리 감사합니다]

두 가지 간단한 방법이 있습니다.

  1. 파일을 반복기로 사용
lines = list(open('C:/path/file.txt'))
# ... or if you want to have a list without EOL characters
lines = [l.rstrip() for l in open('C:/path/file.txt')]
  1. 3 Python 3.4를 사용하는 것이 .pathlib프로그램의 다른 작업에 사용할 수 있는 파일 경로를 만들려면 다음과 같이 하십시오.
from pathlib import Path
file_path = Path("C:/path/file.txt") 
lines = file_path.read_text().split_lines()
# ... or ... 
lines = [l.rstrip() for l in file_path.open()]

splitlines() 함수를 사용합니다.여기 예가 있습니다.

inp = "file.txt"
data = open(inp)
dat = data.read()
lst = dat.splitlines()
print lst
# print(lst) # for python 3

출력에는 라인 리스트가 표시됩니다.

대용량/대용량 파일에 직면하여 더 빨리 읽고 싶은 경우(Topcoder/Hackerlank 코딩 경쟁에 참가하고 있다고 가정하면), 파일 레벨에서 한 줄씩 반복하는 것이 아니라 메모리 버퍼에 한 번에 상당히 큰 행의 덩어리를 읽을 수 있습니다.

buffersize = 2**16
with open(path) as f: 
    while True:
        lines_buffer = f.readlines(buffersize)
        if not lines_buffer:
            break
        for line in lines_buffer:
            process(line)

이를 위한 가장 쉬운 방법은 다음과 같습니다.

lines = list(open('filename'))

또는

lines = tuple(open('filename'))

또는

lines = set(open('filename'))

set회선순서는 보존되어 있지 않고 중복된 회선은 삭제해야 합니다.

아래에 @MarkAmery에서 중요한 보충 자료를 추가했습니다.

.close " 오브젝트 사용"with스테이트먼트, 일부 Python 구현에서는 파일을 읽은닫히지 않을 수 있으며 프로세스에서 열린 파일 핸들이 누출될 수 있습니다.

CPython(대부분의 사람들이 사용하는 일반적인 Python 구현)에서는 파일 객체가 즉시 가비지 수집되고 파일이 닫히기 때문에 이것은 문제가 되지 않지만, 그럼에도 불구하고 다음과 같은 작업을 수행하는 것이 일반적으로 모범 사례로 간주됩니다.

with open('filename') as f: lines = list(f) 

사용하고 있는 Python 의 실장에 관계없이, 파일이 확실히 닫힙니다.

에도 빈 , 이 을 통해 전달해 .filter

with open(myFile, "r") as f:
    excludeFileContent = list(filter(None, f.read().splitlines()))

사용방법:

import pandas as pd
data = pd.read_csv(filename) # You can also add parameters such as header, sep, etc.
array = data.values

data는 데이터 프레임유형으로 값을 사용하여 ndarray를 가져옵니다. '하다'를 볼 수 있습니다.array.tolist().

개요와 개요

filename 「」로부터 합니다.Path(filename) with " " " object with with object open(filename) as f , , , , , , 을 .

  • list(fileinput.input(filename))
  • 를 사용합니다.with path.open() as f콜, 콜, 콜f.readlines()
  • list(f)
  • path.read_text().splitlines()
  • path.read_text().splitlines(keepends=True)
  • 하여 말하다fileinput.input ★★★★★★★★★★★★★★★★★」f ★★★★★★★★★★★★★★★★★」list.append 줄 한 줄
  • flist.extend
  • f

아래에 각각의 사용 사례를 설명하겠습니다.

Python에서는 파일을 한 줄씩 읽으려면 어떻게 해야 하나요?

훌륭한 질문입니다.먼저 샘플 데이터를 작성하겠습니다.

from pathlib import Path
Path('filename').write_text('foo\nbar\nbaz')

파일 개체는 느린 반복자이므로 반복하기만 하면 됩니다.

filename = 'filename'
with open(filename) as f:
    for line in f:
        line # do something with the line

파일이 개 " " 를 합니다.fileinput.input른른른「1」은 다음과 같습니다.

import fileinput

for line in fileinput.input(filename): 
    line # process the line

또는 여러 파일의 경우 파일 이름 목록을 전달합니다.

for line in fileinput.input([filename]*2): 
    line # process the line

한 번, 하다.f ★★★★★★★★★★★★★★★★★」fileinput.input상기 둘 다 게으른 반복자/반환한다.는 한할 수 않고 코드를 더 한 코드를 fileinput.input(filename)기서서여

Python에서는 파일을 한 줄 한 줄 목록으로 읽으려면 어떻게 해야 합니까?

아, 근데 무슨 이유에선지 리스트에 올리고 싶어?이치노 fileinput.input(filename)로로 합니다.list:

list(fileinput.input(filename))

, 하다, 하다, 하다, 하다, 라고 하는 것입니다.f.readlines의 내용을 의 「최고」까지).hint여러 개의 목록으로 분할할 수 있습니다.)

이 파일 개체에는 두 가지 방법으로 액세스할 수 있습니다. 가지 을 1번으로 입니다.open★★★★

filename = 'filename'

with open(filename) as f:
    f.readlines()

경로에서 새 합니다.pathlib서부터 사용): module(모듈)( 「모듈」, 「모듈」):

from pathlib import Path

path = Path(filename)

with path.open() as f:
    f.readlines()

list또한 파일 반복기를 사용하고 목록을 반환합니다.이것은 매우 직접적인 방법입니다.

with path.open() as f:
    list(f)

하기 전에 한 한 에 한 줄씩 .Path 및 "" " " " " "splitlines()「」입니다.splitlines

path.read_text().splitlines()

회선을 하려면 , 「」를 건네 .keepends=True:

path.read_text().splitlines(keepends=True)

파일을 한 줄씩 읽고 목록 끝에 한 줄씩 추가하고 싶습니다.

몇 가지 방법으로 쉽게 최종 결과를 입증해 왔기 때문에, 이것은 좀 어리석은 요구입니다.하지만 여러분 당신의 리스트를 만든다 또는 작동을 본 받아 필터링 하기 때문에, 유머 이 요청 해야 할 수 있습니다.

「」를 사용합니다.list.append너나 하기 전에 그것을 첨부하려면 각 줄에 수술을 필터링 할:허락하시겠습니까.

line_list = []
for line in fileinput.input(filename):
    line_list.append(line)

line_list

「」를 사용합니다.list.extend조금 더, 그리고 만약 기존의 목록을 가지고 있습니다 아마도 유용한 직접 될 것이다.

line_list = []
line_list.extend(fileinput.input(filename))
line_list

또는 더 관용어적으로, 우리는 대신에, 안쪽에는 지도와 필터 만약 바람직한:목록 이해력을 사용할 수 있다.

[line for line in fileinput.input(filename)]

아니면 심지어 더욱 직접적으로, 단지 직접 줄에 가동하지 않은 채 새로운 목록을 만들기에 전달한 원이 문을 닫기:.

list(fileinput.input(filename))

결론

파일에서 목록으로 줄을 가져오는 방법은 많이 보셨지만, 많은 양의 데이터를 목록으로 구체화하는 것은 피하고 가능하면 데이터를 처리하는 데 Python의 느린 반복을 사용하는 것이 좋습니다.

선호도, 선호도, 선호도,fileinput.input ★★★★★★★★★★★★★★★★★」with path.open() as f.

저는 다음 것을 사용하고 싶습니다.대사를 바로 읽습니다.

contents = []
for line in open(filepath, 'r').readlines():
    contents.append(line.strip())

또는 목록 이해 사용:

contents = [line.strip() for line in open(filepath, 'r').readlines()]

NumPy에서 loadtx 명령어를 사용할 수도 있습니다.이것은 genfromtx보다 조건이 적기 때문에 더 빠를 수 있습니다.

import numpy
data = numpy.loadtxt(filename, delimiter="\n")

아래 중 하나의 방법을 시도해 보겠습니다.하는 예제 에는 '아까보다'라는 .dummy.txt파일은 이쪽에서 찾을 수 있습니다.파일이 코드와 같은 디렉토리에 있는 것 같습니다(변경 가능).fpath적절한 파일 이름과 폴더 경로를 포함합니다.)

아래 두 예에서 원하는 목록은 다음과 같습니다.lst.

1.> 번째 방법:

fpath = 'dummy.txt'
with open(fpath, "r") as f: lst = [line.rstrip('\n \t') for line in f]

print lst
>>>['THIS IS LINE1.', 'THIS IS LINE2.', 'THIS IS LINE3.', 'THIS IS LINE4.']

2.>번째 방법에서는 Python Standard Library의 csv.reader 모듈사용할 수 있습니다.

import csv
fpath = 'dummy.txt'
with open(fpath) as csv_file:
    csv_reader = csv.reader(csv_file, delimiter='   ')
    lst = [row[0] for row in csv_reader] 

print lst
>>>['THIS IS LINE1.', 'THIS IS LINE2.', 'THIS IS LINE3.', 'THIS IS LINE4.']

두 가지 방법 중 하나를 사용할 수 있습니다.「 」의 lst두 가지 방법이 거의 동일합니다.

다음은 파일 I/O를 단순화하기 위해 사용하는 Python(3) 도우미 라이브러리 클래스입니다.

import os

# handle files using a callback method, prevents repetition
def _FileIO__file_handler(file_path, mode, callback = lambda f: None):
  f = open(file_path, mode)
  try:
    return callback(f)
  except Exception as e:
    raise IOError("Failed to %s file" % ["write to", "read from"][mode.lower() in "r rb r+".split(" ")])
  finally:
    f.close()


class FileIO:
  # return the contents of a file
  def read(file_path, mode = "r"):
    return __file_handler(file_path, mode, lambda rf: rf.read())

  # get the lines of a file
  def lines(file_path, mode = "r", filter_fn = lambda line: len(line) > 0):
    return [line for line in FileIO.read(file_path, mode).strip().split("\n") if filter_fn(line)]

  # create or update a file (NOTE: can also be used to replace a file's original content)
  def write(file_path, new_content, mode = "w"):
    return __file_handler(file_path, mode, lambda wf: wf.write(new_content))

  # delete a file (if it exists)
  def delete(file_path):
    return os.remove() if os.path.isfile(file_path) else None

다음 그를 합니다.FileIO.lines뭇매를 맞다

file_ext_lines = FileIO.lines("./path/to/file.ext"):
for i, line in enumerate(file_ext_lines):
  print("Line {}: {}".format(i + 1, line))

때 주의해 주세요.mode )"r"및 「」를 해 주세요.filter_fn(디폴트로는 빈 행의 경우) 파라미터는 옵션입니다.

뺄 수도 요.read,write ★★★★★★★★★★★★★★★★★」delete 방법은 그대로 두겠습니다.FileIO.lines, 심지어 도 합니다.read_lines.

명령줄 버전

#!/bin/python3
import os
import sys
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
filename = dname + sys.argv[1]
arr = open(filename).read().split("\n") 
print(arr)

실행 대상:

python3 somefile.py input_file_name.txt

언급URL : https://stackoverflow.com/questions/3277503/how-to-read-a-file-line-by-line-into-a-list

반응형