Python中的文件处理

Python文件处理

在任何Web应用程序中,文件处理都非常重要并且容易出错。如果文件的读取或写入未正常关闭,则很容易发生文件资源泄漏。

在python中,文件处理的概念非常简单且简短。文件操作按以下顺序进行:

  1. 如果是预定义或可选模式,则打开文件

  2. 读或写

  3. 关闭档案

开启档案

open()python中函数,以读取,写入或追加模式打开文件。该open()会返回一个文件对象。

语法:

    open(filename, mode)

模式有很多种,

模式描述
'r'打开阅读(默认模式)
'w'开放写作
'一种'打开追加
'r +'打开以进行读写
't'以文本模式打开文件
'b'以二进制模式打开文件

读取文件

# 导入模块
import os

# 读取文件内容的功能
def read_file(file_loc):
    file_obj = open(file_loc)
    print(file_obj.read())

# 主要功能/代码
if __name__ == '__main__':
    dir_name = os.path.dirname(__file__)
    file_name = os.path.join(dir_name, 'samples/sample_file.txt')
    read_file(file_name)

输出结果

this is a sample file

在上面的示例中,如果未将模式作为参数传递,则使用“读取”模式打开文件。

读取文件的另一种方法是仅调用所需数量的字符。

# 导入模块
import os

# 读取文件内容的功能
def read_file(file_loc):
    file_obj = open(file_loc)
    print(file_obj.read(10))

# 主要功能/代码
if __name__ == '__main__':
    dir_name = os.path.dirname(__file__)
    file_name = os.path.join(dir_name, 'samples/sample_file.txt')
    read_file(file_name)

输出结果

this is a

要将文件的行作为列表读取,请使用函数readlines(),返回整个文件中的行列表。达到EOF时,读取方法将返回空值。

# 导入模块
import os

# 读取文件内容的功能
def read_file(file_loc):
    file_obj = open(file_loc)
    print(file_obj.readlines())

# 主要功能/代码
if __name__ == '__main__':
    dir_name = os.path.dirname(__file__)
    file_name = os.path.join(dir_name, 'samples/sample_file.txt')
    read_file(file_name)

输出结果

['this is a sample file']

写入文件

# 导入模块
import os

# 读取文件内容的功能
def read_file(file_loc):
    file_obj = open(file_loc)
    print(file_obj.read())
    #print(file_obj.read(10))

# 写入文件的功能
def write_file(file_loc):
    file_obj = open(file_loc, "w")
    file_obj.write("MY sample file for include_help\n")
    file_obj.write("I can write long long lines")
    file_obj.close()

# 主要功能/代码
if __name__ == '__main__':
    dir_name = os.path.dirname(__file__)
    write_file_name = os.path.join(dir_name, 'samples/sample_file_1.txt')
    write_file(write_file_name)
    read_file(write_file_name)

在上面的示例中,我们看到了方法close(),非常重要的一点是,要写入的文件对象始终处于关闭状态,以终止使用中的资源并释放系统。

追加模式

# 导入模块
import os

# 读取文件内容的功能
def read_file(file_loc):
    file_obj = open(file_loc)
    print(file_obj.read())

# 写入文件的功能
def write_file(file_loc):
    file_obj = open(file_loc, "w")
    file_obj.write("MY sample file for include_help\n")
    file_obj.write("I can write long long lines")
    file_obj.close()

# 附加文件
def append_file(file_loc):
    file_obj = open(file_loc, "a")
    file_obj.write("\n appending the information")
    file_obj.close()
    

# 主要功能/代码
if __name__ == '__main__':
    dir_name = os.path.dirname(__file__)
    write_file_name = os.path.join(dir_name, 'samples/sample_file_1.txt')
    write_file(write_file_name)
    append_file(write_file_name)
    read_file(write_file_name)

输出结果

MY sample file for include_help
I can write long long lines
 appending the information

附加模式用于在文件中附加其他信息的情况,而不是在每次调用时都创建文件。

with() 方法

with()method是一种有用的方法,它会自动关闭以任何方式打开的所有文件,并完成自动清理。

# 导入模块
import os

# 读取操作功能
def with_read_operation(file_loc):
    with open(file_loc) as file_obj:
        data = file_obj.read()
    print(data)

# 写入操作功能
def with_write_operation(file_loc):
    with open(file_loc, "w") as file_obj:
        file_obj.write("writing using with()")

# 主要功能/代码
if __name__ == '__main__':
    dir_name = os.path.dirname(__file__)
    write_file_name = os.path.join(dir_name, 'samples/sample_file_2.txt')
    with_write_operation(write_file_name)
    with_read_operation(write_file_name)

输出结果

writing using with()

其他文件操作是

方法描述
tell()返回一个整数,给出文件对象在文件中的当前位置,表示为从文件开头开始的字节数。
seek(offset, whence)更改文件对象的位置。通过将偏移量与参考点相加来计算位置,并从whence参数中选择参考点。