知人のファイル操作
様々なファイル操作のPythonコード。
基本コンポーネント:
- ファイルパス:パス
- オープン:読み取り、書き込み、追記、読み取り、書き込み、読み......
- エンコード:UTF-8 / GBK / GB2312 ......
f = open('文件路径或者相对路',encoding='编码方式',mode='模式') # 格式构成 cotent = f.read() print(content) f.close()
コードの説明:
開いた:
内蔵機能、コールの底部は、オペレーティングシステムのインターフェースで開きます。
F:
変数は、変数名が大会(F1、FH、file_handler、f_h)が、ファイルハンドルという変数名は、そこにあります。任意の操作の塔メンバーが行われ、方法は、ファイルハンドルがで「」を追加していました。
エンコーディング:
あなたが書いていない場合、これはシステムのデフォルトエンコーディングデフォルトエンコーディングで、書き込むことはできません。
Windowsの場合:GKB
Linuxの場合:UTF-8
MacOSの:UTF-8
モード:
Rの読み取りモード:それはあなたの動作モードを定義することです。
f.read():
あなたはファイルハンドルで操作しなければならないなど、ファイルの内容に書き込み、そのようなファイルを読み込むなどのファイルを、操作したいです。
f.colse():
ファイルを閉じます。(閉じた状態でなければならない、そうでない場合は、永久的なメモリになります。)
ファイル操作三つのステップ:
ファイルを開きます。
ファイルハンドル対応する動作。
ファイルを閉じます。
# 打开文件,得到文件句柄并赋值给一个变量 f = open('文件.txt', 'r', encoding='utf-8') # 默认打开模式就为 r # 通过句柄对文件进行操作 date = f.read() # 关闭文件 f.close()
エラーの理由:
UnicodeDecodeError:ファイルが格納されている場合、コードブックは、開いているファイルと矛盾しています。
パス区切りの問題が発生します:
解决方法:在路径前加个 r r'C:\Users\Desktop\文件.txt'
ファイル操作:読み取り
ファイルの読み出し動作は、4つのモード(R、RB、R +、R + B)があるR +とR + Bで使用されていない、などの非テキストファイルRB操作、オーディオ、画像、ビデオ、。各モードの5つの方法(リード()、READ(n)は、readlineの()、readlines()用)があります。
Rモード
読み取り専用ファイルを開いた、ファイルポインタはファイルの先頭に配置されます。これは、ファイルはrファイルを使用して、その後、デフォルトの動作モードをモードに設定されていない場合、操作の最も頻繁に使用されるモードは、デフォルトのモードです。
例えば:
f = open('文件.txt', mode='r', encoding='utf-8') msg = f.read() f.close() print(msg)
read()は、すべての読み取りを一度に
読んで()外のファイルのすべての内容を読み込みます。欠点:ファイルが非常に大きいメモリフットプリントになる場合、簡単にメモリ破壊につながります。
f = open('测试', mode='r', encoding='utf-8') msg = f.read() f.close() print(msg) # 输出结果: 这是一行测试 A:这是第二行 B:这是第三行 C:这是第几行 D:这是我也不知道第几行 就这么地吧.
(n)を読んでどのような位置の読み取りを指定します
モードRにおいて、nは文字の読みに応じて
f = open('测试', mode='r', encoding='utf-8') msg = f.read(4) f.close() print(msg) # 输出结果: 这是一行
readlineの()ラインの読みにより、
readlineのは()のライン時間、注意読み込み:バックが持っているデータを読み出すためのreadline()を\ nは、唯一の我々はOKに戻って読み出したファイルに()ストリップを追加する必要があり、この問題を解決するために
f = open('测试', mode='r', encoding='utf-8') msg1 = f.readline() msg2 = f.readline().strip() msg3 = f.readline() msg4 = f.readline() f.close() print(msg1) print(msg2) print(msg3) print(msg4) # 输出结果: 这是一行测试 A:这是第二行 B:这是第三行 C:这是第几行
readlines()のリストを返します。
readlines()リストを返し、ファイルが大きい場合、元のファイルの各行のリストとなっている各要素は、メモリを占め、容易に崩壊します。
f = open('测试', mode='r', encoding='utf-8') print(f.readlines()) # 还可以这么写的,哈哈 f.close() # 输出结果: ['这是一行测试\n', 'A:这是第二行\n', 'B:这是第三行\n', 'C:这是第几行\n', 'D:这是我也不知道第几行\n', '就这么地吧.']
トップ4は、ファイルが大きい場合、我々は第五の方法を持っているので、より多くのメモリを介してコンテンツを、彼らは、簡単に爆発する、非常に良いではありません。
forループ
forループを読みに行くことができ、ファイルハンドルがイテレータである、彼は各サイクルによって特徴付けられるだけなので、メモリ保存、メモリ内のデータの1行を占めました。
f = open('测试', mode='r', encoding='utf-8') for line in f: print(line) # 去掉 \n 可以这样写: print(line.strip()) # 这种方式就是在一行一行的进行读取,它就执行了下边的功能 ''' print(f.readline()) print(f.readline()) print(f.readline()) ....... ''' # 输出结果: 这是一行测试 A:这是第二行 B:这是第三行 C:这是第几行 D:这是我也不知道第几行 就这么地吧.
特別な注意:ファイルを読み込むには、シャットダウンするために必要
RBモード
RBモード:読み取り専用のバイナリ形式のファイルを開きます。ファイルポインタはファイルの先頭に配置されます。画像、オーディオ、ビデオ、次の話はbと同じであることを覚えているバイナリファイル形式の操作です、彼らは主に非テキストファイル操作しない宣言を行い、その後、あなたはファイルとモードで動作している場合とBの場合をエンコーディング。
f1 = open('图片.jpeg', mode='rb') tu = f1.read() f1.close() print(tu) # 输出结果: b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00H\x00H\x00\x00\xff\xe1\x00\xb0Exif\x............后面还有.老长老长了..此处省略了.
RBモデルもない一つずつ実証により、これらの方法を循環させるためのリードリード(N)のreadline()を、readlines()を有しています。
ファイル操作:書き込み
書き込みファイル操作、(+ B W + wのWB、W、)の4つのモード、+ B wの+があると一般的に使用されていない、非テキストは、次のようなWBの操作、ファイル:画像、ビデオ、オーディオを。操作方法は以下のとおりです(「書き込まれます」)書き込み
モードのw
ファイルは、ファイルワットの動作モードと、存在しない場合は、ファイルを作成し、コンテンツを書き込みます。
f = open('这是一个新创建的文件', encoding='utf-8', mode='w') f.write('果然是一个新创建的文件') f.close()
ファイルには、新しいコンテンツを書いて、元のファイルの内容を空にし、操作のワットモードを使用して、ファイルが存在する場合。
f = open('这是一个新创建的文件', encoding='utf-8', mode='w') f.write('这是清空后重新写入的内容') f.close()
WBモード
WBモード:のみ書き込み用バイナリ形式で開いたファイル。ファイルが既に存在する場合は、ファイルを開いている最初から編集を開始、元のコンテンツが削除されます。ファイルが存在しない場合は、新しいファイルを作成します。画像、オーディオ、ビデオなど:一般的のような非テキストファイルに使用。
>>例:
すべてのタイプを読み出し、その後、私は絵のコピーと同様のプロセスを完了して、新しいファイルに書き込まれたすべてのデータをWBに出読み込むバイトの内容の画像とI最初のRBモード。具体的なコードは次のよう:
# 第一步:将原图片通过 rb 模式读取出来。 f = open('图片.jpeg', mode='rb') content = f.read() f.close() # 第二步:将读取出来的数据通过 wb 模式写入新文件。 f1 = open('图片1.jpeg', mode='wb') f1.write(content) f1.close()
ファイル操作:追加
追加コンテンツはファイルです。4つのファイルの分類主に4つのモードがあります:、AB、+、 + bは、 我々はについて話します
モード
ファイルが存在しない場合は、ファイル操作モードの使用は、それは、ファイルを作成し、コンテンツを書き込みます。
f = open('追加文本', encoding='utf-8', mode='a') f.write('这个文件是没有的,我是新创建的') f.close()
ファイルが存在する場合、ファイル操作モードを使用し、それは、最終的な文書の追加コンテンツに直面するだろう。
f = open('追加文本', encoding='utf-8', mode='a') f.write('这是己存在的文件,我是新追加的内容') f.close()
ファイル操作の他のモード
私は、+記号を持つモデルの一種であるパターンが、そこにあると言っていませんでした。それを+とのモードとは何ですか?+これは、機能を追加することです。例えば、単にRモードの話は読み取り専用モードになります。このモードでは、ファイルハンドルのみ、この操作は、読み取りおよび書き込みに似て読むことができますが、この種の操作を書き込むことはできません。私たちは、このファイルハンドルは、彼らが行うことができます読み取りと書き込みの両方の操作を操作することができますしたいので、これはどのように行うのでしょうか?これは、モードを言うために起こっている:+は読み書きモードW、R +書き込みモードを、+は読み書きモード、rは+ B読み書きモードタイプでバイト.........
ここではについて話します種であるR +、彼はライン上で練習することができ、他の類似しました、。
#1. 打开文件的模式有(默认为文本模式):
r,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】
#2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
#3,‘+’模式(就是增加了一个功能)
r+,读写【可读,可写】
w+,写读【可写,可读】
a+,写读【可写,可读】
#4,以bytes类型操作的读写,写读,写读模式
r+b,读写【可读,可写】
w+b,写读【可写,可读】
a+b,写读【可写,可读】
R +モードでは、読みとAPPENDシーケンスが間違っていることはできません
R +:読み込みと書き込みのためにファイルを開きます。デフォルトのファイルポインタはファイルの先頭に配置されます。
f = open('文件的读写.txt', encoding='utf-8', mode='r+') content = f.read() print(content) f.write('这是新写入的内容') f.close()
注:あなたは読み書きモードになっている場合は、書き込み後読み取り最初のデフォルトのカーソルをファイルの先頭にあるので、そのファイルはあなたが最初に書いた場合、それまで上書き話す元のコンテンツの内容を記述し、問題になりますあなたが書かれ、その後、後で読み始めてきた内容をカバーしています。
小概要:
三つの一般的な方向:
読み取り、4つのモード:R RB R + R + B
書き込み、4つのモード:W、WB、W +、 + bはwの
4つのモード追加:AB、+、 + bを
:に対応する機能
、ファイルハンドルの操作:リードリード(N)のreadline( )readlines()ライト()
ファイル操作のその他の特徴
f.tell()は、カーソル位置を取得する手段である:バイト
f = open('测试', encoding='utf-8', mode='r') print(f.tell()) content = f.read() print(f.tell()) f.close() # 原文件内容 这是一行测试 A:这是第二行 B:这是第三行 C:这是第几行 D:这是我也不知道第几行 就这么地吧. # 输出结果: 0 # 开始的位置 122 # 结束的位置
()f.seekカーソルの位置を調整する(注:これは中国の一部である場合、移動ユニットは、バイトである場合は、複数のUTF-8 3)
f = open('测试', encoding='utf-8', mode='r') f.seek(9) content = f.read() print(content) f.close() # 原文件内容 这是一行测试 A:这是第二行 B:这是第三行 C:这是第几行 D:这是我也不知道第几行 就这么地吧. # 输出结果: 行测试 A:这是第二行 B:这是第三行 C:这是第几行 D:这是我也不知道第几行 就这么地吧.
f.flush()リフレッシュを強制します
f = open('测试', encoding='utf-8', mode='w') f.write('fafdsfsfsadfsaf') f.flush() f.close()
ファイルを開くための別の方法(これが一般的です)
オープン()のような....
# 优点1:不用手动关闭文件句柄 # 利用with上下文管理这种方式,它会自动关闭文件句柄。 with open('测试', encoding='utf-8', mode='r') as f: print(f.read()) # 优点2:可以加多个 open 操作 # 一个with 语句可以操作多个文件,产生多个文件句柄。 with open('测试', encoding='utf-8', mode='r') as f,\ open('测试', encoding='utf-8', mode='w') as f1: print(f.read()) f1.write('kckckckckckckkck')
ここでは、方法は、手動で近いファイルハンドル、多くの地方のものに持っていないが、ファイルハンドルダウンの自動シャットダウンのおかげで、一定の期間があるが、この時間は固定されていないので、問題があるでしょう文でファイルを開き、問題に注意しなければなりませんあなたは声明で、T1のRモードでファイルを開いた場合、あなたはそれはあなたがファイルT1を開く二度目可能で、最初のファイルハンドルが閉鎖されていないこの時点で、ファイルT1を開くために、再度パターンを以下の通り、あなたは、ファイルをもう一度開く前に、おそらく彼の唯一の解決策、ミスがあるだろう、ファイルハンドルを手動で閉じられています。
ファイルを変更します。
データファイルはハードディスクに保存されているので、そこだけカバーされ、何も変更はありません、特に二つの方法で実装され、すべてのシミュレートされた結果、私たちは通常、ファイルを変更見る、と言うことです。
変更されたファイル操作方法:
1は、元のファイルは読み取りモードで開かれます。
書き込みモードで新しいファイルを作成します。2.。
3、ファイルの元の内容を新しいファイルに書かれた新しいコンテンツを読み出すように変更されます。
4、元のファイルが削除されます。
5、元のファイルに新しいファイルの名前を変更します。ウェイ:すべてのメモリにロードされたハードディスクに保存されたファイルの内容を、メモリは修正が完了し、変更され、その後、ハードディスク(ワード、VIM、nodpad ++エディタなど)へのメモリでカバーすることができます
import os # 调用系统模块 with open('测试', encoding='utf-8') as f1,\ open('测试.bak', encoding='utf-8',mode='w') as f2: old_content = f1.read() # 全部读入内存,如果文件很大,会卡死 new_content = old_content.replace('文', 'wen') # 在内存中完成修改 f2.write(new_content) # 一次性写入新文件 os.remove('测试') # 删除原文件 os.rename('测试.bak', '测试') # 将新建的文件重命名为原文件 # 原文件内容 **文件操作改的流程:** 1,以读的模式打开原文件。 2,以写的模式创建一个新文件。 3,将原文件的内容读出来修改成新内容,写入新文件。 4,将原文件删除。 5,将新文件重命名成原文件。 # 修改后的内容 **wen件操作改的流程:** 1,以读的模式打开原wen件。 2,以写的模式创建一个新wen件。 3,将原wen件的内容读出来修改成新内容,写入新wen件。 4,将原wen件删除。 5,将新wen件重命名成原wen件。
第二の方法:メモリにハードディスクに格納されたファイルの内容が行毎に読み出され、新しいファイルが書き込まれる変更が完了し、最後に新しいファイルとソースファイルを覆っている(これは一般的に使用されています)
import os with open('测试', encoding='utf-8') as f1,\ open('测试.bak', encoding='utf-8',mode='w') as f2: for line in f1: # 一行一行的改,占内存少 new_line = line.replace('wen', '文') f2.write(new_line) os.remove('测试') os.rename('测试.bak', '测试') # 原文件内容 **wen件操作改的流程:** 1,以读的模式打开原wen件。 2,以写的模式创建一个新wen件。 3,将原wen件的内容读出来修改成新内容,写入新wen件。 4,将原wen件删除。 5,将新wen件重命名成原wen件。 # 修改后的内容 **文件操作改的流程:** 1,以读的模式打开原文件。 2,以写的模式创建一个新文件。 3,将原文件的内容读出来修改成新内容,写入新文件。 4,将原文件删除。 5,将新文件重命名成原文件。