ホームページ バックエンド開発 Python チュートリアル Python ファイル読み取り操作の詳細な紹介

Python ファイル読み取り操作の詳細な紹介

Oct 09, 2018 pm 04:29 PM
python

この記事では、Python のファイル読み取り操作について詳しく説明します。参考になるものがあります。困っている友人は参考にしてください。お役に立てれば幸いです。

ファイルを読み取るための操作手順

象を冷蔵庫に入れる手順を尋ねる頭の体操があります。答えは非常に簡単です。冷蔵庫を開けて、象を入れる 押し込んで冷蔵庫を閉めます。これは問題に対処するためのアイデアです。ファイルに対する操作は同じです。最初のステップ: ファイルを開きます。第 2 ステップ: ファイルを処理します (読み取りまたは書き込み)。第 3 ステップはファイルを閉じます。方法それについて?実はとても簡単なので、ファイル操作について詳しく説明していきます。

ファイルを開く

1

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

ログイン後にコピー

ファイルを開くには、open() 関数を使用する必要があります。() に含まれるパラメータは、次の 3 つのパラメータだけを知っている必要があります。最初の段階は、ファイル、モード、エンコーディングです

#file

#最初はファイル名、タイプは文字列、パスは次のとおりです。開くファイルが現在のファイルと同じファイルにある場合 ディレクトリ内の場合はパス(相対パス)を省略できます。 #ファイルを開くためのモードです。形式は次のとおりです: mode='mode'、ここで「mode=」は省略できます。モードを直接記述します。モードが指定されていない場合、デフォルトは r です。特定のモードは次のとおりです。

ここでは、疑似名詞であるポインターを紹介します。Word でテキストを編集するときに、カーソルがあると想像してみてください。ポインタは、ファイルに対するすべての操作が開始されるカーソルと考えることができます。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

只读。文件的初始指针在文件的开头。这是默认模式。

rb

只读的二进制格式。文件的初始指针在文件的开头。

r+

读写。文件的初始指针在文件的开头。

rb+

读写的二进制格式。文件的初始指针在文件的开头。

w

只写。如果该文件已存在则打开文件,清空文件内容。如果该文件不存在,则创建新文件。

wb

只写的二进制格式。如果该文件已存在则打开文件,清空文件内容。如果该文件不存在,创建新文件。

w+

写读。如果该文件已存在则打开文件,清空文件内容。如果该文件不存在,创建新文件。

wb+

写读的二进制格式。如果该文件已存在则打开文件,清空文件内容。如果该文件不存在,创建新文件。

a

追加写。如果该文件存在,文件的初始指针在文件的结尾。新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

追加写的二进制格式。如果该文件存在,文件的初始指针在文件的结尾。新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

追加写读。如果该文件已存在,文件的初始指针在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

追加写读的二进制格式。如果该文件已存在,文件的初始指针在文件的结尾。如果该文件不存在,创建新文件用于读写。

ログイン後にコピー

encoding

3 番目のパラメータは、ファイルのエンコーディング (非バイナリ形式で使用) です。エンコーディング設定は、ファイルのエンコーディングと一致している必要があります。開かれない場合、エラーが報告されます。これは、ソース ファイルがどのエンコーディングで書かれているかを意味し、ファイルを開くときにどのエンコーディングを使用する必要があるかを示します。

ファイルの処理

エラーの例を示します。実装される操作は、「test」という名前のファイルを開くことです。元のファイル エンコーディングは utf- 8. で、開くときに gbk エンコードを使用しました。

その文書には一文しかありません: 10 歩で 1 人を殺し、1,000 マイルに痕跡を残さない。

コードは次のとおりです:

1

2

3

4

file = open('test','r',encoding='gbk')

content = file.read()

print(content)

file.close()

ログイン後にコピー
次の手順は次のとおりです。open 関数によって返された結果はファイル オブジェクトなので、それを受け取るには変数を使用する必要があります (ファイル)。これにより、このオブジェクトを file.read()、file.write、file.flush() などのメソッドで便利に使用できるようになります。 read() は、ファイル オブジェクトのメソッドです。その機能は読み取りです。指定された文字数。指定されていない場合は、デフォルトで読み込まれます。すべてのコンテンツを取得します。

ただし、上記のコードを実行するとエラーが報告されます。以下はエラー メッセージです。主な考え方は、gbkエンコードをデコードできません (ファイルを開くプロセスが実際にはデコード プロセスです)

1

2

3

4

5

6

7

8

9

10

11

12

    ---------------------------------------------------------------------------

 

    UnicodeDecodeError                        Traceback (most recent call last)

 

    <ipython-input-78-bb879f008680> in <module>()

          4 #这里说明以下,open函数返回的结果是一个文件对象,所以要用一个变量接收一下(file),这样我们就可以方便地使用这个

          5 #对象的方法了,比如file.read(),file.write,file.flush()等等

    ----> 6 content = file.read()#read()是文件对象的一个方法,作用是读取指定的字符数,如果未指定则默认读取所有内容

          print(content)

          8 file.close()

 

    UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 4: illegal multibyte sequence

ログイン後にコピー

解決策は非常に簡単です。エンコード方法を utf-8 に変更するだけです。Linux システムのデフォルトは utf-8 エンコードであるためです。 , エンコーディングは省略できます。ファイルを読み込むだけなので、モードは r です。デフォルトのモードは r です。省略することもできます。 したがって、コードは次のようになります:

1

2

3

4

5

6

file = open('test')

content = file.read()

print(content)

file.close()

输出为:

十步杀一人,千里不留行

ログイン後にコピー

メソッド read() に数値パラメータを追加することもできます。これは、漢字か文字かに関係なく、読み取る文字数を指定するために使用されます。 , 1 つの文字は 1 つの文字または中国語の文字に対応し、バイトと区別する必要があります。例は次のとおりです:

1

2

3

4

5

6

file = open('test')

content = file.read(3)

print(content)

file.close()

输出为:

十步杀

ログイン後にコピー

以前のファイルを開く方法は、ステートメントを記述する必要があったため、さらに面倒でした。最後にファイルを閉じるための簡単な方法です。メソッドの形式は次のとおりです:

1

2

with open() as file_name:

    操作代码......

ログイン後にコピー

このメソッドを使用する利点は、ファイルを閉じるためのステートメントを記述する必要がないことです。キーワードと同様に、形式を覚えておいてください。
次にバイナリ形式のファイルを作成します

1

2

with open('二进制','wb'as file: 

    file.write('十步杀一人,千里不留行'.encode('utf8'))

ログイン後にコピー

ファイルを開く方法はバイナリ形式であるため、ファイルを書き込むときに文字列を書き込む必要があります。バイナリ形式ですが、「十歩で人を殺し、千マイルに痕跡を残さない」の場合、「この文字列のバイナリ形式は何ですか?」分からないので、.encode(utf8) を使用してこの文字列をバイナリ形式に変換します。実際、この文字列に対応するバイナリ形式は、別のコードを通じて知ることができます。コードは次のとおりです:

1

2

3

print('十步杀一人,千里不留行'.encode('utf8'))

输出的二进制格式(表现形式为16进制,为什么?因为二进制太长了啊!!!)为:

b'\xe5\x8d\x81\xe6\xad\xa5\xe6\x9d\x80\xe4\xb8\x80\xe4\xba\xba\xef\xbc\x8c\xe5\x8d\x83\xe9\x87\x8c\xe4\xb8\x8d\xe7\x95\x99\xe8\xa1\x8c'

ログイン後にコピー

在实际中我们当然不可能写这么长的东西,所以我们使用.encode('utf8')来转化。转化时我们使用了utf-8的编码方式。
在这里说明一下为什么要编码,想弄清楚这件事就要明白计算机的存储原理。
简单地讲,文件在计算机中都是以二进制格式存储的,对于计算机来讲只有两个数字有意义,那就是0和1,也就是二进制,而不同的0和1的组合代表不同的含义(编码不同),比如在gbk编码下一个汉字由两个字节表示,也就是16位二进制数(16个0和1的组合),而在utf-8编码下一个汉字由3个字节表示,也就是24位二进制数(24个0和1的组合),而我们现在要给计算机存储的就是0和1的组合,那么在读取文件或者转化字符串时,如果你不告诉计算机你使用的是哪种编码的话,计算机怎么可能知道这些0和1的组合代表什么含义呢?所以从计算机取出数据或者把普通字符串转化成二进制格式时你必须告诉计算机你使用的是什么编码方式。
在本例中使用utf-8编码,所以在字符串后面加上.encode(utf8)

那么为什么平时可以直接写入普通字符串呢?那是因为在用open()函数打开文件的时候就已经指定了编码方式。
形象地解释:open函数相当于打开了一种通道,平时打开时都是用某种编码的方式打开的,所以我们在写入内容时不必管它以什么编码进入通道的(因为在open函数里面就已经指定了编码方式)
而当open函数使用二进制格式打开时(就是带b的模式),这个通道就没有指定编码方式,通道里面只有二进制,所以此时往通道里面放入非二进制格式内容的话就需要指定一种编码方式。除非你直接在file.write()函数中直接写二进制,但是人类是不可能记住那么多二进制组合所代表的含义的。

然后我们来读取一下上面创建的名字为“二进制”的这个文件

1

2

with open('二进制','rb'as file:

    print('不指定解码方式时的结果:',file.read())

ログイン後にコピー

如果我们在读取时不指定解码方式,那么输出的结果就是下面这种人类无法理解的奇怪的东西(实际上它是用16进制表示的二进制)

1

不指定解码方式时的结果: b'\xe5\x8d\x81\xe6\xad\xa5\xe6\x9d\x80\xe4\xb8\x80\xe4\xba\xba\xef\xbc\x8c\xe5\x8d\x83\xe9\x87\x8c\xe4\xb8\x8d\xe7\x95\x99\xe8\xa1\x8c'

ログイン後にコピー

所以我们在读取时也要指定编码:

1

2

3

4

5

with open('二进制','rb'as file:

    content = file.read()

    print('指定解码方式后的结果:',content.decode('utf-8'))

 

指定解码方式后的结果: 十步杀一人,千里不留行

ログイン後にコピー

其他的在读取时可能用到的方法:

1

2

3

4

readline()读取一行,如果里面添加了参数n,则会读取n个字符(我觉得这是个bug,貌似没什么卵用)

readlines()读取所有内容,结果返回一个列表,元素由每一行组成。

tell()会输出当前指针的位置,注意,该位置是以字节来计算的,不是字符

seek()重新指定指针位置。

ログイン後にコピー

使用readlines()并不是一个好方法,因为是一次性将文件都读取到内存中,如果文件较大时则造成内存溢出,实际中使用下面的方法,系统会自动生成一个迭代器,用迭代的方法把需要的数据取出来。

1

2

3

with open('libai'as f:

    for i in f: #这里的i实际就是迭代后的每一行,用for循环的方式从文件对象中取出来,取一行读一行,节省内存

        print(i)

ログイン後にコピー

1

2

3

4

5

6

7

8

9

10

11

赵客缦胡缨,吴钩霜雪明。银鞍照白马,飒沓如流星。

 

十步杀一人,千里不留行。事了拂衣去,深藏身与名。

 

闲过信陵饮,脱剑膝前横。将炙啖朱亥,持觞劝侯嬴。

 

三杯吐然诺,五岳倒为轻。眼花耳热后,意气素霓生。

 

救赵挥金锤,邯郸先震惊。千秋二壮士,烜赫大梁城。  

 

纵死侠骨香,不惭世上英。谁能书阁下,白首太玄经。

ログイン後にコピー

关闭文件

如果用with open() 来打开文件的话就不用管关闭文件的操作了,因为Python已经帮你完成了这一步,否则必须在处理文件之后加上关闭文件的操作:file_name.close()


以上がPython ファイル読み取り操作の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

XML形式を開く方法 XML形式を開く方法 Apr 02, 2025 pm 09:00 PM

ほとんどのテキストエディターを使用して、XMLファイルを開きます。より直感的なツリーディスプレイが必要な場合は、酸素XMLエディターやXMLSPYなどのXMLエディターを使用できます。プログラムでXMLデータを処理する場合、プログラミング言語(Pythonなど)やXMLライブラリ(XML.ETREE.ELEMENTTREEなど)を使用して解析する必要があります。

XMLをPDFに変換できるモバイルアプリはありますか? XMLをPDFに変換できるモバイルアプリはありますか? Apr 02, 2025 pm 08:54 PM

XMLをPDFに直接変換するアプリケーションは、2つの根本的に異なる形式であるため、見つかりません。 XMLはデータの保存に使用され、PDFはドキュメントを表示するために使用されます。変換を完了するには、PythonやReportLabなどのプログラミング言語とライブラリを使用して、XMLデータを解析してPDFドキュメントを生成できます。

XMLのコメントコンテンツを変更する方法 XMLのコメントコンテンツを変更する方法 Apr 02, 2025 pm 06:15 PM

小さなXMLファイルの場合、注釈コンテンツをテキストエディターに直接置き換えることができます。大きなファイルの場合、XMLパーサーを使用してそれを変更して、効率と精度を確保することをお勧めします。 XMLコメントを削除するときは注意してください。コメントを維持すると、通常、コードの理解とメンテナンスが役立ちます。高度なヒントは、XMLパーサーを使用してコメントを変更するためのPythonサンプルコードを提供しますが、特定の実装を使用するXMLライブラリに従って調整する必要があります。 XMLファイルを変更する際のエンコード問題に注意してください。 UTF-8エンコードを使用して、エンコード形式を指定することをお勧めします。

XMLの変更にはプログラミングが必要ですか? XMLの変更にはプログラミングが必要ですか? Apr 02, 2025 pm 06:51 PM

XMLコンテンツを変更するには、ターゲットノードの正確な検出が必要であるため、プログラミングが必要です。プログラミング言語には、XMLを処理するための対応するライブラリがあり、APIを提供して、データベースの運用などの安全で効率的で制御可能な操作を実行します。

推奨されるXMLフォーマットツール 推奨されるXMLフォーマットツール Apr 02, 2025 pm 09:03 PM

XMLフォーマットツールは、読みやすさと理解を向上させるために、ルールに従ってコードを入力できます。ツールを選択するときは、カスタマイズ機能、特別な状況の処理、パフォーマンス、使いやすさに注意してください。一般的に使用されるツールタイプには、オンラインツール、IDEプラグイン、コマンドラインツールが含まれます。

携帯電話用の無料のXMLからPDFツールはありますか? 携帯電話用の無料のXMLからPDFツールはありますか? Apr 02, 2025 pm 09:12 PM

モバイルには、単純で直接無料のXMLからPDFツールはありません。必要なデータ視覚化プロセスには、複雑なデータの理解とレンダリングが含まれ、市場のいわゆる「無料」ツールのほとんどは経験がありません。コンピューター側のツールを使用したり、クラウドサービスを使用したり、アプリを開発してより信頼性の高い変換効果を取得することをお勧めします。

携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? 携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? Apr 02, 2025 pm 10:09 PM

Mobile XMLからPDFへの速度は、次の要因に依存します。XML構造の複雑さです。モバイルハードウェア構成変換方法(ライブラリ、アルゴリズム)コードの品質最適化方法(効率的なライブラリ、アルゴリズムの最適化、キャッシュデータ、およびマルチスレッドの利用)。全体として、絶対的な答えはなく、特定の状況に従って最適化する必要があります。

携帯電話のXMLファイルをPDFに変換する方法は? 携帯電話のXMLファイルをPDFに変換する方法は? Apr 02, 2025 pm 10:12 PM

単一のアプリケーションで携帯電話でXMLからPDF変換を直接完了することは不可能です。クラウドサービスを使用する必要があります。クラウドサービスは、2つのステップで達成できます。1。XMLをクラウド内のPDFに変換し、2。携帯電話の変換されたPDFファイルにアクセスまたはダウンロードします。

See all articles