Pythonファイルの操作方法

小云云
リリース: 2018-03-30 16:18:06
オリジナル
1564 人が閲覧しました

この記事では主にPythonのファイル操作と簡単なコピーとバックアップについて紹介しますので、お役に立てれば幸いです。

1. open 関数
Python ではすべてがオブジェクトなので、ファイルを開く通常のプロセスは
1. ファイルを選択する - ファイルを開く - 編集、コピー、削除などの操作を行う - ファイルを閉じる
それをPythonに入れてコードで実装します。つまり:
f = open(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True):
f.close ()
ここで、file はファイルの絶対パスです。ファイル名を追加します。mode はファイル読み取りモードです。デフォルトは r (読み取り専用モード) です。ソース コード内のオプションの
mode は

として説明されています
‘r’       open for reading (default) 
‘w’       open for writing, truncating the file first 
‘x’       create a new file and open it for writing 
‘a’       open for writing, appending to the end of the file if it exists 
‘b’       binary mode 
‘t’       text mode (default) 
‘+’       open a disk file for updating (reading and writing) 
‘U’       universal newline mode (deprecated)
ログイン後にコピー
ログイン後にコピー

ソース コードを読むことをお勧めします。翻訳は次のとおりです。
r 読み取り専用モードでドキュメントを開きます。ファイル ポインタはファイルの先頭に配置されます。これがデフォルトのモードです。
rb 読み取り専用としてバイナリ形式でファイルを開きます。ファイル ポインタはファイルの先頭に配置されます。これがデフォルトのモードです。
r+ 読み取りと書き込みのためにファイルを開きます。ファイル ポインタはファイルの先頭に配置されます。
rb+ は、読み取りと書き込みのためにバイナリ形式でファイルを開きます。ファイル ポインタはファイルの先頭に配置されます。
w 書き込み専用のファイルを開きます。ファイルがすでに存在する場合は上書きされます。ファイルが存在しない場合は、新しいファイルを作成します。
wb 書き込み専用のバイナリ形式でファイルを開きます。ファイルがすでに存在する場合は上書きされます。ファイルが存在しない場合は、新しいファイルを作成します。
w+ 読み取りと書き込みのためにファイルを開きます。ファイルがすでに存在する場合は上書きされます。ファイルが存在しない場合は、新しいファイルを作成します。
wb+ は、読み取りと書き込みのためにバイナリ形式でファイルを開きます。ファイルがすでに存在する場合は上書きされます。ファイルが存在しない場合は、新しいファイルを作成します。
a 追加するファイルを開きます。ファイルがすでに存在する場合、ファイル ポインタはファイルの末尾に配置されます。言い換えれば、新しいコンテンツは既存のコンテンツの後に書かれます。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。
ab 追加するためにバイナリ形式でファイルを開きます。ファイルがすでに存在する場合、ファイル ポインタはファイルの末尾に配置されます。言い換えれば、新しいコンテンツは既存のコンテンツの後に書かれます。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。
a+ 読み取りと書き込みのためにファイルを開きます。ファイルがすでに存在する場合、ファイル ポインタはファイルの末尾に配置されます。ファイルは追加モードで開かれます。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルが作成されます。
ab+ は追加のためにバイナリ形式でファイルを開きます。ファイルがすでに存在する場合、ファイル ポインタはファイルの末尾に配置されます。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルが作成されます。
ここでは、ファイルを開くたびに f.close メソッドを呼び出す必要がありますが、これは面倒で忘れがちです:
with open(“E:githubprojectSource-codebasisfiletest.txt”, mode='r) で最適化しましょう。 ') として:
pass
ここで f はファイルを開くことと同等ですが、この時点ではファイルは読み取られません。つまり、ファイルはメモリに配置されません。 f には多くの組み込みメソッドがあり、より一般的に使用されるのは f.write です。 ()
ここでは fwrite を使用してファイルのコピーを実装します:
with open(“E:githubprojectSource-codebasisfiletest.txt”, mode='r') as f:
内容 = f.read()
open(“E:githubprojectSource-codebasisfiletest_bak.txt”, mode=’w’) as f_bak:
f_bak.write(contents)
ただし、このメソッドは毎回書き込む必要があるため、ファイル名をカプセル化する関数を使用します
def cp(path):
open(path, ‘r’) as f:
データ = f.read()
Filename = path[0:path.rindex(“.”)] # rindex メソッドを通じて前の文字列 (つまり、ファイル名) を取得します
ext = path[path.rindex(“.”):] # rindex メソッドを通じて . の後の文字列 (つまり、ファイルの接尾辞) を取得します
open(“%s_bak%s” % (filename, ext), 'w') as f_bak: # _bak という名前の新しいファイルを開いて操作します
f_bak.write(data)

path = “E:githubprojectSource-codebasisfiletest.txt”
path = path.replace(””, “/”) # 特殊文字の変換を避けるために、文字列に含まれる文字を / に変換します 間違っています問題

path = '/'.join(path.split('')) #上記の方法と似ていますが、特殊文字はまだ変換できません...

cp(path)
ファイル名を追加する問題Windowsはまだ解決されていません パスが特殊文字に結合される問題
readメソッドを呼び出すと、ファイルはメモリに書き込まれますが、10Gなどの大きなファイルをコピーしたい場合はどうすればよいですか
Python ファイル操作 ポインタに関して言えば、どこかを読み取ると、ポインタは読み取った場所を指します。read(100) を実行すると、ポインタは最後を指します。次回の読み取りでここから読み取りを行うと、 f.seek(0, 0) はポインターを初期位置に返します。ポインターを使用して複数回読み取り、大きなファイルをコピーできます。

def cp(path): 
    filename = path[0:path.rindex(“.”)]  # 通过rindex方法取得.之前的字符串(即文件名) 
    ext = path[path.rindex(“.”):]  # 通过rindex方法取得.之后的字符串(即文件后缀) 
    with open(path, ‘r’) as f, open(“%s_bak%s” % (filename, ext), ‘a’) as f_bak: 
        while True: 
            data = f.read(1024) 
            print(data) 
            f_bak.write(data) 
            if len(data) == 0: 
                break
path = “E:\githubproject\Source-code\basis\file\test.txt” path = path.replace(“\”, “/”)  # 将字符串中含\的转换为/,避免出现特殊字符转换错误的问题
ログイン後にコピー
ログイン後にコピー

path = ‘/’.join(path.split(‘\’)) #与上方法类似,但是还无法转换特殊字符…

cp(path)

这篇文章主要介绍了python操作文件,以及简单的复制备份.
1.open函数
python中一切皆对象,所以正常我们打开一个文件的过程是
1.选中文件-打开文件-编辑,复制,删除等操作-关闭文件
放到python中用代码实现就是:
f = open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True):
f.close()
其中file是文件的绝对路径加文件名,mode是文件读取方式,默认为r即只读方式,后面的选填
mode在源码的解释为

‘r’       open for reading (default) 
‘w’       open for writing, truncating the file first 
‘x’       create a new file and open it for writing 
‘a’       open for writing, appending to the end of the file if it exists 
‘b’       binary mode 
‘t’       text mode (default) 
‘+’       open a disk file for updating (reading and writing) 
‘U’       universal newline mode (deprecated)
ログイン後にコピー
ログイン後にコピー

建议大家看源码:翻译过来就是:
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
这里我们每次打开file都要调用f.close方法比较麻烦也容易忘,这里用with优化一下:
with open(“E:\githubproject\Source-code\basis\file\test.txt”, mode=’r’) as f:
pass
这里f就相当于打开了文件,但是此时并没有读取文件,即没有把文件放到内存中,f有很多内置方法,比较常用的是f.write()
这里我们使用fwrite来实现文件的复制:

with open(“E:\githubproject\Source-code\basis\file\test.txt”, mode=’r’) as f: 
    contents = f.read() 
    with open(“E:\githubproject\Source-code\basis\file\test_bak.txt”, mode=’w’) as f_bak: 
        f_bak.write(contents) 但是这个方法每次都要写,所以我们用个函数把文件名封装进进去. def cp(path): 
    with open(path, ‘r’) as f: 
        data = f.read() 
        filename = path[0:path.rindex(“.”)]  # 通过rindex方法取得.之前的字符串(即文件名) 
        ext = path[path.rindex(“.”):]  # 通过rindex方法取得.之后的字符串(即文件后缀) 
        with open(“%s_bak%s” % (filename, ext), ‘w’) as f_bak:  # 新建文件名_bak的文件打开并操作 
            f_bak.write(data)
path = “E:\githubproject\Source-code\basis\file\test.txt” path = path.replace(“\”, “/”)  # 将字符串中含\的转换为/,避免出现特殊字符转换错误的问题
ログイン後にコピー

path = ‘/’.join(path.split(‘\’)) #与上方法类似,但是还无法转换特殊字符…

cp(path)
目前还没解决windows中文件名加路径组合成了特殊字符的问题
我们调用read方法的时候会将文件写入内存,但是如果我们要复制一个很大的文件,比如有10个G的时候怎么办呢,
python文件操作有个指针的说法,即当我们read到某处的时候,指针就会指到read的地方,当我们read()的时候,文件就指向了末尾,当read(100),指针即指向100,下次read再从此处读取,f.seek(0, 0)即将指针回到初始位置,我们可以利用指针来多次读取实现大文件的复制:

def cp(path): 
    filename = path[0:path.rindex(“.”)]  # 通过rindex方法取得.之前的字符串(即文件名) 
    ext = path[path.rindex(“.”):]  # 通过rindex方法取得.之后的字符串(即文件后缀) 
    with open(path, ‘r’) as f, open(“%s_bak%s” % (filename, ext), ‘a’) as f_bak: 
        while True: 
            data = f.read(1024) 
            print(data) 
            f_bak.write(data) 
            if len(data) == 0: 
                break
path = “E:\githubproject\Source-code\basis\file\test.txt” path = path.replace(“\”, “/”)  # 将字符串中含\的转换为/,避免出现特殊字符转换错误的问题
ログイン後にコピー
ログイン後にコピー

path = ‘/’.join(path.split(‘\’)) #与上方法类似,但是还无法转换特殊字符…

cp(path)

相关推荐:

Python 操作 MySQL 的正确姿势

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート