>  기사  >  백엔드 개발  >  한 기사에서 Python으로 파일을 읽는 방법에 대한 모든 지식을 얻으세요.

한 기사에서 Python으로 파일을 읽는 방법에 대한 모든 지식을 얻으세요.

WBOY
WBOY앞으로
2023-04-11 23:22:071278검색

한 기사에서 Python으로 파일을 읽는 방법에 대한 모든 지식을 얻으세요.

파일은 어디에나 있습니다. 어떤 프로그래밍 언어를 사용하든 파일 처리는 모든 프로그래머에게 필수적입니다.

파일 처리는 파일을 만들고, 데이터를 쓰고, 파일에서 읽는 데 사용되는 방법입니다. 데이터를 가져오는 과정에서 Python은 다양한 파일 유형을 처리하기 위한 다양한 패키지를 통해 파일 처리를 더욱 쉽고 편리하게 완료할 수 있습니다

이 문서 개요:

  • 컨텍스트 관리자를 사용하여 파일 열기
  • Python 파일 읽기 모드에서
  • 텍스트 파일 읽기
  • CSV 파일 읽기
  • JSON 파일 읽기

파일 열기

파일 내용에 액세스하기 전에 파일을 열어야 합니다. Python은 다양한 모드로 파일을 여는 데 도움이 되는 내장 함수를 제공합니다. open() 함수는 파일 이름과 모드라는 두 가지 기본 매개변수를 허용합니다.

기본 모드는 "r"이며, 읽기 전용 모드로 파일을 엽니다. 이러한 모드는 파일에 액세스하는 방법과 해당 내용을 조작하는 방법을 정의합니다. open() 함수는 여러 가지 모드를 제공하는데, 나중에 하나씩 논의하겠습니다

이제 'Zen of Python' 파일을 사용하여 나중에 논의하고 학습하겠습니다.

f = open('zen_of_python.txt', 'r')
print(f.read())
f.close()

출력:

The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
...

위 코드에서 open () 함수는 텍스트 파일을 읽기 전용 모드로 열므로 파일을 변경하지 않고도 파일에서 정보를 얻을 수 있습니다. 첫 번째 줄에서는 open() 함수의 출력이 텍스트 파일을 나타내는 객체 f에 할당됩니다. 두 번째 줄에서는 read() 메서드를 사용하여 전체 파일을 읽고 그 내용을 인쇄합니다. ) 메소드는 파일을 닫습니다. 컴퓨터 리소스를 확보하고 예외 발생을 방지하려면 열린 파일을 처리한 후 항상 닫아야 한다는 점에 유의하는 것이 중요합니다.

Python에서는 컨텍스트 관리자와 함께 사용하여 파일이 완료된 후 프로그램이 사용된 리소스를 해제하는지 확인할 수 있습니다. close, 이는 예외가 발생하더라도 마찬가지입니다

with open('zen_of_python.txt') as f:
 print(f.read())

출력:

The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
...

위 코드는 with 문을 사용하여 컨텍스트를 생성하고 이를 모든 파일 개체 메서드가 파일 개체에 액세스할 수 있는 변수 f에 바인딩합니다. read() 메서드는 두 번째 줄에서 전체 파일을 읽은 다음 print() 함수를 사용하여 파일 내용을 출력합니다

프로그램이 with 문 블록 컨텍스트의 끝에 도달하면 파일을 닫아 리소스를 해제하고 다른 프로그램에서는 정상적으로 호출할 수 있습니다. 일반적으로 더 이상 사용할 필요가 없고 즉시 닫아야 하는 개체(예: 파일, 데이터베이스, 네트워크 연결)를 처리할 때는 with 문을 사용하는 것이 좋습니다

여기서 주목해야 할 점은 with 컨텍스트 관리자 블록을 종료한 후 f 변수에도 액세스할 수 있지만 파일은 닫힙니다. 몇 가지 파일 개체 속성을 시도하고 변수가 아직 거기에 있고 액세스 가능한지 확인해 보겠습니다.

print("Filename is '{}'.".format(f.name))
if f.closed:
 print("File is closed.")
else:
 print("File isn't closed.")

출력:

Filename is 'zen_of_python.txt'.
File is closed.

하지만 이 시점에서는 파일을 읽거나 쓸 수 없으며, 파일을 닫는 동안에는 액세스할 수 없습니다. 내용을 사용하면 다음과 같은 오류가 발생합니다.

f.read()

Output:

---------------------------------------------------------------------------
ValueErrorTraceback (most recent call last)
~AppDataLocalTemp/ipykernel_9828/3059900045.py in <module>
----> 1 f.read()
ValueError: I/O operation on closed file.

File Reading Mode in Python

앞서 언급했듯이 파일을 열 때 모드를 지정해야 합니다. 다음 표는 Python의 다양한 파일 모드를 보여줍니다.

모드 설명

  • 'r'은 읽기 전용 파일을 엽니다.
  • 'w'는 쓰기용으로 파일을 엽니다. 파일이 있으면 덮어쓰고 없으면 새 파일이 생성됩니다.
  • 'a'는 첨부용으로만 파일을 엽니다. 파일이 없으면 생성됩니다.
  • 'x'는 새 파일을 생성합니다. 파일이 있으면 실패
  • '+' 업데이트할 파일 열기

텍스트 모드 "t", 기본 모드 또는 바이너리 모드 "b"에서 파일을 열도록 지정할 수도 있습니다. 간단한 명령문을 사용하여 dataquest_logo.png 이미지 파일을 복사하는 방법을 살펴보겠습니다.

with open('dataquest_logo.png', 'rb') as rf:
 with open('data_quest_logo_copy.png', 'wb') as wf:
 for b in rf:
 wf.write(b)

위 코드는 Dataquest 로고 이미지를 복사하여 동일한 경로에 저장합니다. 'rb' 모드는 읽기를 위해 바이너리 모드로 파일을 열고, 'wb' 모드는 병렬 쓰기를 위해 텍스트 모드로 파일을 엽니다.

텍스트 파일 읽기

Python에서 텍스트 파일을 읽는 방법에는 여러 가지가 있습니다. 아래에서 몇 가지 유용한 방법을 소개합니다. 텍스트 파일의 내용을 읽는 방법

지금까지 우리는 read() 메서드를 사용하여 파일의 전체 내용을 읽을 수 있다는 것을 배웠습니다. 텍스트 파일에서 몇 바이트만 읽으려면 read() 메서드에서 바이트 수를 지정할 수 있습니다. 시도해 봅시다:

with open('zen_of_python.txt') as f:
 print(f.read(17))

출력:

The Zen of Python

위의 간단한 코드는 zen_of_python.txt 파일의 처음 17바이트를 읽고 인쇄합니다.

때때로 텍스트 파일의 내용을 한 줄씩 읽는 것이 더 합리적일 때도 있습니다. 이 경우 readline() 메서드를 사용할 수 있습니다

with open('zen_of_python.txt') as f:
 print(f.readline())

출력:

The Zen of Python, by Tim Peters

위 코드는 파일의 첫 번째 줄을 반환하고, 메서드를 다시 호출하면 두 번째 줄을 반환합니다.

with open('zen_of_python.txt') as f:
 print(f.readline())
 print(f.readline())
 print(f.readline())
 print(f.readline())

출력:

The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.

이 유용한 방법은 전체 파일을 점진적으로 읽는 데 도움이 될 수 있습니다.

以下代码通过逐行迭代来输出整个文件,直到跟踪我们正在读取或写入文件的位置的文件指针到达文件末尾。当 readline() 方法到达文件末尾时,它返回一个空字符串

with open('zen_of_python.txt') as f:
 line = f.readline()
 while line:
 print(line, end='')
 line = f.readline()

Output:

The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

上面的代码在 while 循环之外读取文件的第一行并将其分配给 line 变量。在 while 循环中,它打印存储在 line 变量中的字符串,然后读取文件的下一行。while 循环迭代该过程,直到 readline() 方法返回一个空字符串。空字符串在 while 循环中的计算结果为 False,因此迭代过程终止

读取文本文件的另一个有用方法是 readlines() 方法,将此方法应用于文件对象会返回包含文件每一行的字符串列表

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

让我们检查 lines 变量的数据类型,然后打印它:

print(type(lines))
print(lines)

Output:

<class 'list'>
['The Zen of Python, by Tim Petersn', 'n', 'Beaut...]

它是一个字符串列表,其中列表中的每个项目都是文本文件的一行,``n` 转义字符表示文件中的新行。此外,我们可以通过索引或切片操作访问列表中的每个项目:

print(lines)
print(lines[3:5])
print(lines[-1])

Output:

['The Zen of Python, by Tim Petersn', 'n', 'Beautiful is better than ugly.n', ... -- let's do more of those!"]
['Explicit is better than implicit.n', 'Simple is better than complex.n']
Namespaces are one honking great idea -- let's do more of those!

读取 CSV 文件

到目前为止,我们已经学会了如何使用常规文本文件。但是有时数据采用 CSV 格式,数据专业人员通常会检索所需信息并操作 CSV 文件的内容

接下来我们将使用 CSV 模块,CSV 模块提供了有用的方法来读取存储在 CSV 文件中的逗号分隔值。我们现在就尝试一下

import csv
with open('chocolate.csv') as f:
 reader = csv.reader(f, delimiter=',')
 for row in reader:
 print(row)

Output:

['Company', 'Bean Origin or Bar Name', 'REF', 'Review Date', 'Cocoa Percent', 'Company Location', 'Rating', 'Bean Type', 'Country of Origin']
['A. Morin', 'Agua Grande', '1876', '2016', '63%', 'France', '3.75', 'Âxa0', 'Sao Tome']
['A. Morin', 'Kpime', '1676', '2015', '70%', 'France', '2.75', 'Âxa0', 'Togo']
['A. Morin', 'Atsane', '1676', '2015', '70%', 'France', '3', 'Âxa0', 'Togo']
['A. Morin', 'Akata', '1680', '2015', '70%', 'France', '3.5', 'Âxa0', 'Togo']
...

CSV 文件的每一行形成一个列表,其中每个项目都可以轻松的被访问,如下所示:

import csv
with open('chocolate.csv') as f:
 reader = csv.reader(f, delimiter=',')
 for row in reader:
 print("The {} company is located in {}.".format(row[0], row[5]))

Output:

The Company company is located in Company Location.
The A. Morin company is located in France.
The A. Morin company is located in France.
The A. Morin company is located in France.
The A. Morin company is located in France.
The Acalli company is located in U.S.A..
The Acalli company is located in U.S.A..
The Adi company is located in Fiji.
...

很多时候,使用列的名称而不是使用它们的索引,这通常对专业人员来说更方便。在这种情况下,我们不使用 reader() 方法,而是使用返回字典对象集合的 DictReader() 方法

import csv
with open('chocolate.csv') as f:
 dict_reader = csv.DictReader(f, delimiter=',')
 for row in dict_reader:
 print("The {} company is located in {}.".format(row['Company'], row['Company Location']))

Output:

The A. Morin company is located in France.
The A. Morin company is located in France.
The A. Morin company is located in France.
The A. Morin company is located in France.
The Acalli company is located in U.S.A..
The Acalli company is located in U.S.A..
The Adi company is located in Fiji.
...

读取 JSON 文件

我们主要用于存储和交换数据的另一种流行文件格式是 JSON,JSON 代表 JavaScript Object Notation,允许我们使用逗号分隔的键值对存储数据

接下来我们将加载一个 JSON 文件并将其作为 JSON 对象使用,而不是作为文本文件,为此我们需要导入 JSON 模块。然后在 with 上下文管理器中,我们使用了属于 json 对象的 load() 方法,它加载文件的内容并将其作为字典存储在上下文变量中。

import json
with open('movie.json') as f:
 content = json.load(f)
 print(content)

Output:

{'Title': 'Bicentennial Man', 'Release Date': 'Dec 17 1999', 'MPAA Rating': 'PG', 'Running Time min': 132, 'Distributor': 'Walt Disney Pictures', 'Source': 'Based on Book/Short Story', 'Major Genre': 'Drama', 'Creative Type': 'Science Fiction', 'Director': 'Chris Columbus', 'Rotten Tomatoes Rating': 38, 'IMDB Rating': 6.4, 'IMDB Votes': 28827}

让我们检查内容变量的数据类型:

print(type(content))

Output:

<class 'dict'>

它的数据类型是字典,因此我们可以方便的从中提取数据

print('{} directed by {}'.format(content['Title'], content['Director']))

Output:

Bicentennial Man directed by Chris Columbus

总结

今天我们讨论了 Python 中的文件处理,重点是读取文件的内容。我们了解了 open() 内置函数、with 上下文管理器,以及如何读取文本、CSV 和 JSON 等常见文件类型。

好了,这就是今天分享的全部内容,喜欢就点个赞吧~

위 내용은 한 기사에서 Python으로 파일을 읽는 방법에 대한 모든 지식을 얻으세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제