it-swarm-ko.tech

한 줄씩 파일을 한 줄씩 읽는 방법?

어떻게 파이썬에서 파일의 모든 라인을 읽고 각 라인을리스트에 요소로 저장합니까?

파일을 한 줄씩 읽고 각 줄을 목록 끝에 추가하려고합니다.

2014
Julie Raswick
with open(fname) as f:
    content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content] 
1883
SilentGhost

입력 및 출력 :

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

또는 개행 문자를 제거하는 방법 :

lines = [line.rstrip('\n') for line in open('filename')]

편집자 주 : Janus Troelsen의 주석에 의해 암시 된이 답변의 원래 공백 제거 명령 line.strip()은 후행 \n뿐만 아니라 _ ​​앞뒤 모두공백을 제거합니다.

849
Felix Kling

이것은 필요한 것보다 분명하지만 당신이 원하는 것을합니다.

with open("file.txt", "r") as ins:
    array = []
    for line in ins:
        array.append(line)
469
robert

그러면 파일의 "배열"이 생깁니다.

lines = Tuple(open(filename, 'r'))
236
Noctis Skytower

\n 포함 :

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

\n를 포함시키지 않으려면 다음을 수행하십시오.

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

제안 된대로 간단히 다음을 수행 할 수 있습니다.

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

이 접근법에는 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 클래스의 구현은 당신을위한 연습으로 남겨 두었습니다.).

이것은 어떤 파일 크기에서도 잘 작동 할 것이며 단 한 번의 패스만으로 파일을 검토 할 수 있습니다. 이것은 일반적으로 일반 구문 분석기가 작동하는 방식입니다.

121
DevShark

파일을 닫는 것에 신경 쓰지 않는다면,이 한 줄기가 작동합니다 :

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

전통 방법 :

fp = open('file.txt') # Open file on read mode
lines = fp.read().split("\n") # Create a list containing all lines
fp.close() # Close file

withreadlines() (권장) 사용 :

with open('file.txt') as fp:
    lines = fp.readlines()
97
Pedro Lobito

목록에 데이터

다음과 같은 데이터가 포함 된 텍스트 파일이 있다고 가정합니다.

텍스트 파일 내용 :

line 1
line 2
line 3
  • 같은 디렉터리에서 cmd를 엽니 다 (마우스 오른쪽 단추로 클릭하고 cmd 또는 PowerShell 선택).
  • python을 실행하고 인터프리터에서 다음을 작성합니다.

파이썬 스크립트

>>> with open("myfile.txt", encoding="utf-8") as file:
...     x = [l.strip() 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']

또는...

>>> y = [x.rstrip() for x in open("my_file.txt")]
>>> y
['line 1','line 2','line 3']


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

with open('testodiprova.txt', 'r', encoding='utf-8') as file:
  file = file.readlines()
  print(file)
53
Giovanni Gianni

이것은 open 명령을 캡슐화해야합니다. 

array = []
with open("file.txt", "r") as f:
  for line in f:
    array.append(line)
45
cevaris

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

  • 파일을여십시오
  • 파일을 읽으십시오
  • 내용을 목록으로 저장

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

lst = list(open(filename))

그러나 나는 더 많은 설명을 추가 할 것입니다.

파일 열기

특정 파일을 열고 파일 핸들 (또는 파일과 같은 핸들)을 직접 처리하지 않는다고 가정합니다. Python에서 파일을 여는 데 가장 일반적으로 사용되는 함수는 open 이며, 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)

파일 확장자를 지정해야합니다. 탐색기에서 볼 때 .txt 또는 .doc 등과 같은 파일 확장자는 by default 로 숨겨져 있기 때문에 이것은 Windows 사용자에게 특히 중요합니다.

두 번째 인수는 mode이며 기본적으로 "읽기 전용"을 의미하는 r입니다. 그것이 바로 귀하의 경우에 필요한 것입니다.

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

파일을 읽으려면 mode을 생략하거나 명시 적으로 전달하십시오.

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

둘 다 파일을 읽기 전용 모드로 엽니 다. Windows에서 이진 파일을 읽으려면 rb 모드를 사용해야합니다.

open(filename, 'rb')

다른 플랫폼에서는 'b' (바이너리 모드)가 무시됩니다.


이제 파일을 open하는 방법을 보여 주었으므로 항상 다시 close해야한다는 사실에 대해 이야기하겠습니다. 그렇지 않으면 프로세스가 종료 될 때까지 파일에 열린 파일 핸들을 유지합니다 (또는 Python이 파일 핸들을 가비지시킵니다).

사용할 수있는 동안 :

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

openclose 사이에 예외가 발생하면 파일을 닫지 못합니다. tryfinally을 사용하면이를 피할 수 있습니다.

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

그러나 Python은 더 예쁜 구문을 가진 컨텍스트 관리자를 제공합니다 (그러나 open의 경우 위의 tryfinally과 거의 동일 함).

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

마지막 접근 방식은 파이썬에서 파일을 여는 recommended 접근 방식입니다!

파일 읽기

이제 파일을 열었습니다. 이제 파일을 읽는 방법은 무엇입니까?

open 함수는 file 객체를 반환하며 Pythons 반복 프로토콜을 지원합니다. 각 반복은 당신에게 줄을 줄 것입니다 :

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

파일의 각 줄이 인쇄됩니다. 그러나 각 줄의 끝에 줄 바꿈 문자 \n가 포함됩니다 (Python이 범용 줄 바꿈 지원 으로 빌드되어 있는지 확인하고 싶을 수도 있습니다. 그렇지 않으면 Windows의 경우 \r\n 또는 Mac의 경우 \r이 줄 바꿈으로 표시됩니다). 원하지 않는 경우 마지막 문자 (또는 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)

그러나 end of string 에서 모든 공백 (\n 문자 포함)을 제거하면 다른 모든 trailing 공백이므로 중요한 경우주의해야합니다.

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

그러나 줄이 \r\n (Windows "newlines")로 끝나는 경우 .rstrip()\r를 처리합니다!

내용을 목록으로 저장

이제 파일을 열고 읽는 방법을 알았으므로 내용을 목록에 저장해야합니다. 가장 간단한 옵션은 list 함수를 사용하는 것입니다.

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

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

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

또는 더 간단합니다. 기본적으로 file 객체의 .readlines() 메서드는 list 행을 반환합니다.

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

여기에는 후행 줄 바꿈 문자도 포함됩니다. 원하지 않는 경우 메모리에 모든 줄을 포함하는 두 목록을 유지하지 않기 때문에 [line.rstrip() for line in f] 접근 방식을 권장합니다.

원하는 출력을 얻는 추가 옵션이 있지만 다소 "차선 적"입니다. read 문자열의 전체 파일을 다음 줄 바꿈으로 나눕니다.

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()이지만 목록에 저장하기 전에 행을 처리하려면 간단한 목록 이해를 권장합니다.
40
MSeifert

청결하고 Pythonic 한 방법으로 파일의 라인을 목록으로 읽는 방법


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

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]
  • 출력 (유니 코드 문자로 인해 모양이 다릅니다) :
     ['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ã.
38
Johnny

나는 이렇게 할거야.

lines = []
with open("myfile.txt") as f:
    for line in f:
        lines.append(line)
29
user3394040

파일에 대한 목록 통합을 사용하면 다음과 같은 옵션이 있습니다.

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

이것은 대부분의 작업이 파이썬 인터프리터 내에서 이루어 지므로보다 효율적인 방법이어야합니다.

24
user1833244

또 다른 옵션은 numpy.genfromtxt 입니다. 예를 들면 다음과 같습니다.

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

이렇게하면 data이 파일에있는 행 수만큼 NumPy 배열이됩니다.

23
atomh33ls

명령 줄이나 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

21
oliland

가장 간단한 방법

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

  1. 전체 파일을 문자열로 읽습니다.
  2. 문자열을 한 줄씩 나눕니다.

한 줄에서는 다음과 같이 나타낼 수 있습니다.

lines = open('C:/path/file.txt').read().splitlines()
17
Jean-Francois T.

Python 2 및 Python 3을 사용하여 텍스트 파일을 읽고 씁니다. 그것은 유니 코드와 함께 작동합니다.

#!/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

고급 파일 쓰기/읽기

응용 프로그램의 경우 다음 사항이 중요 할 수 있습니다.

  • 다른 프로그래밍 언어 지원
  • 읽기/쓰기 성능
  • 압축률 (파일 크기)

또한보십시오 : 데이터 직렬화 형식의 비교

오히려 설정 파일을 만드는 방법을 찾고 있다면, 짧은 글 PYTHON의 설정 파일을 읽어보기 바란다.

17
Martin Thoma

Python 3.4에서 소개 된 pathlib 은 다음과 같이 파일에서 텍스트를 읽는 데 매우 편리한 방법을 제공합니다.

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

(splitlines 호출은 파일의 전체 내용을 포함하는 문자열에서 파일의 행 목록으로 바꾸는 것입니다.

pathlib에는 많은 편리한 기능이 있습니다. read_text 는 멋지고 간결하며 파일을 열거 나 닫을 때 걱정할 필요가 없습니다. 파일과 관련된 모든 작업을 한 번에 모두 읽을 수 있다면 좋은 선택입니다.

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

이제 변수 out은 원하는 목록 (배열)입니다. 다음 중 하나를 수행 할 수 있습니다.

for line in out:
    print line

또는

for line in f:
    print line

당신은 같은 결과를 얻을 것이다.

15
moldovean

Splitlines () 함수 만 사용하면됩니다. 다음은 그 예입니다.

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

출력에는 행 목록이 있습니다.

13
Abdullah Bilal

진정한 쉬운 방법 :

with open(file) as g:
    stuff = g.readlines()

본격적인 프로그램으로 만들려면 다음을 입력하십시오.

file = raw_input ("Enter EXACT file name: ")
with open(file) as g:
    stuff = g.readlines()
print (stuff)
exit = raw_input("Press enter when you are done.")

어떤 이유로 든 .py 파일을 제대로 읽지 않습니다.

13
user6111687

다음을 사용하여 파일을 열어 읽을 수 있습니다.

file1 = open("filename","r")
# And for reading use
lines = file1.readlines()
file1.close()

lines리스트는 모든 라인을 개별 요소로 포함 할 것이고, 파이썬이 0부터 카운팅을 시작함에 따라 lines["linenumber-1"]를 사용하여 특정 엘리먼트를 호출 할 수 있습니다.

11
Diksha Dhawan

대용량/거대한 파일에 직면하고 더 빨리 읽음 (Topcoder/Hackerrank 코딩 경쟁에 있다고 상상해보십시오)를 원하면 상당히 큰 청크를 읽을 수 있습니다 파일을 한 번에 한 줄씩 반복하는 것이 아니라 한 번에 여러 줄을 메모리 버퍼에 저장하는 것입니다.

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)
9
pambda

필자의 지식에 따르면 파이썬에는 네이티브 배열 데이터 구조가 없습니다. 그러나 배열보다 사용하기가 훨씬 쉬운 목록 데이터 구조를 지원합니다.

array = [] #declaring a list with name '**array**'
with open(PATH,'r') as reader :
    for line in reader :
        array.append(line)
7
Strik3r

몇 가지 추가 혜택을 통해이를 수행하는 가장 쉬운 방법은 다음과 같습니다.

lines = list(open('filename'))

또는

lines = Tuple(open('filename'))

또는

lines = set(open('filename'))

set이있는 경우 라인 순서를 보존하지 않고 중복 된 라인을 제거해야한다는 것을 기억해야합니다.

7
simhumileco

다음 코드로 쉽게 할 수 있습니다.

lines = open(filePath).readlines()
4
Pedram

다음은 Python (3) 도우미입니다. 도서관 파일 I/O를 단순화하는 데 사용하는 클래스 :

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, writedelete 메서드를 제거하고 FileIO.lines를 그대로 두거나 심지어 read_lines라는 별도 메서드로 변환 할 수도 있습니다.

4
LogicalBranch

이것을 사용하십시오 :

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()을 사용하여 목록을 얻을 수도 있습니다.

4
Zero

이 짧은 스 니펫을 확인하십시오.

fileOb=open("filename.txt","r")
data=fileOb.readlines() #returns a array of lines.

또는 

fileOb=open("filename.txt","r")
data=list(fileOb) #returns a array of lines.

docs 를 참조로 참조하십시오.

3
Seenivasan

아래 언급 된 방법 중 하나를 시도합니다. 사용하는 예제 파일의 이름은 dummy.txt입니다. 파일 here 를 찾을 수 있습니다. 파일이 코드와 동일한 디렉토리에 있다고 가정합니다 (올바른 파일 이름과 폴더 경로를 포함하도록 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.> 두 번째 방법 에서 csv.reader Python 표준 라이브러리 의 모듈 :

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을 만드는 데 걸리는 시간은 두 가지 방법에서 거의 같습니다.

3
Siddharth Satpathy

NumPy에서 loadtxt 명령을 사용할 수도 있습니다. 이것은 genfromtxt보다 적은 조건을 검사하기 때문에 더 빠를 수 있습니다.

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

개요 및 요약

filename을 사용하거나 Path(filename) 개체에서 파일을 처리하거나 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 또는 flist.append를 반복 실행합니다.
  • f을 바운드 list.extend 메소드로 전달하십시오.
  • 목록 이해에 f 사용

나는 각각에 대한 유스 케이스를 아래에서 설명한다.

파이썬에서 파일을 한 줄씩 어떻게 읽습니까?

이것은 훌륭한 질문입니다. 먼저 몇 가지 샘플 데이터를 작성해 보겠습니다.

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를 사용하십시오. 하나의 파일로 :

import fileinput

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

또는 여러 파일의 경우 파일 이름 목록을 전달하십시오.

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

다시 말하지만 ffileinput.input는 모두 반복적 인 지연 반복자입니다. 반복자는 한 번만 사용할 수 있으므로 자세한 기능을 제공하면서 기능 코드를 제공합니다. 여기서 좀 더 간결한 fileinput.input(filename)을 사용합니다.

파이썬에서 어떻게 파일을 한 줄씩 읽습니까 목록으로?

아,하지만 왠지 명단에 넣고 싶습니까? 가능하다면 나는 그것을 피할 것입니다. 그러나 당신이 주장한다면 ... fileinput.input(filename)의 결과를 list에 전달하십시오 :

list(fileinput.input(filename))

또 다른 직접적인 대답은 파일의 내용을 반환하는 f.readlines를 호출하는 것입니다 (최대 hint 수의 문자까지 가능하므로 could 이를 여러 목록으로 분해 할 수 있음). 

이 파일 객체를 두 가지 방법으로 가져올 수 있습니다. 한 가지 방법은 open 내장 파일에 파일 이름을 전달하는 것입니다.

filename = 'filename'

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

또는 pathlib 모듈의 새 Path 객체를 사용하면됩니다.이 객체는 다음과 같이 사용됩니다.

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

결론

파일에서리스트로 여러 줄을 가져 오는 방법을 많이 보았지만 가능한 많은 양의 데이터가 목록에 저장되는 것을 피하고 가능한 경우 파이썬의 느린 반복을 사용하여 데이터를 처리하는 것이 좋습니다.

즉, fileinput.input 또는 with path.open() as f을 선호합니다.

2
Aaron Hall

저는 다음을 사용하고 싶습니다. 즉시 줄을 읽으십시오.

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

또는 목록 이해력 사용 :

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

명령 행 버전

#!/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
1
jasonleonhard

문서에 빈 줄이있는 경우 내용을 읽고 빈 문자열 요소를 방지하기 위해 filter을 전달합니다.

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