python-文件

文件

  • 通python程序来对计算机中的各个文件进行增删改查的操作

  • 在其他语言中有称为 I/O(input / output),在python中就称为文件(file)

  • 操作文件的步骤:

    打开文件
    对文件进行各种操作(读,写)然后保存
    关闭文件

打开文件

  • open()函数用来打开文件

  • 参数:

    ()里有一个位置参数和多个关键字参数
    file 位置参数 是 大开文件的路径
    mode 读还是写操作
    encoding = 指定的字符编码

  • 返回值:

  • 返回一个对象,这个对象就代表了当前打开的文件

例:
file = open('./hhh.txt','w',encoding = 'utf-8')
# 用file这个对象来接收open()的返回值
		
print(file)
	
# 输出结果
	# <_io.TextIOWrapper name='./hhh.txt' mode='w' encoding='utf-8'>

关闭文件

  • 接上面的已经打开文件了

  • lose()

    这个函数用来关闭文件

  • 如果是这样写的话每次调用都要手动关闭文件,有的时候可能会忘掉,可以用以下方法

... as``` 语句
``` 例: with open('hhh.txt','w',encoding='utf-8') as file : print(file) # 这个输出结果还是 # <_io.TextIOWrapper name='hhh.txt' mode='w' encoding='utf-8'> # as 后面的file 就是 通过 前面的 with 把 open()这个返回值赋值给 file这个对象中 # 在这个语句的下一级进行的操作都是对file这个对象进行的操作 # file这个对象就是打开的文件,可以这样理解 # 在with语句结束时文件会自动的colse()
例:
file_name = 'hello'

try:
	with open(file_name) as file_obj :
		print(file_obj.read())
except FileNotFoundError:
	print(f'{file_name} 文件不存在~~')

	# 可以通过try语句来对这个语句进行异常捕获
    # 如果系统内该文件不存在就打不开,然后报错,通过捕获异常来解决或者提醒

读取文件

  • 调用open()函数来打开一个文件,可以将文件分成两种类型

  • 一种 纯文本文件(使用utf-8等编码编写的文本文件)

  • 一种 二进制文件(图片,音乐,视频等文件)

  • open()打开文件时,默认是以文本文件的形式打开的,但是open()默认的编码为None 就是 encodig = None

  • 所以处理文本文件时,必须要指定文件的编码

  • read()

  • 通过read()来读取内容

  • 如果直接调用read()会将文件内的所有内容全部读取出来

  • 这时如果文件比较大的话,会一次性将文件的内容都加载到内存中,容易导致内存泄漏

  • 所以对于比较大的文件不要直接调用read()

  • read()可以接受一个size作为参数,该参数用来指定要读取的字符数量

  • 默认值是-1,也就是全部读取

  • 可以为size指定一个值,这样read()会读取指定数量的字符

  • 每一次读取都是从上次读取到的位置开始读取的

  • 如果字符的数量小于size,则会读取剩余所有的

  • 如果已经读取到了文件的最后了,则会返回 ‘ ‘空字符串

    例:
    		
    # 写入文件的with语句
    with open('hhh.txt','w',encoding='utf-8') as file :
    	# 这是写入文件,现在先不深究
    	file.write('hhh,hello,python\n')
    	file.write('hhh,hello,world\n')
    	file.write('hhh,hello,lmk\n')
    	file.write('hhh,hello,genji\n')
    
    # 读取文件的with语句
    with open('hhh.txt','r',encoding='utf-8')as file:
    	# 一次性读取16个字符
    	print(file.read(16))
    	print(file.read(16))
    	print(file.read(16))
    	print(file.read(16))
    例:
    定义一个循环用来读取文件的内容	
    with open('hhh.txt','r',encoding='utf-8') as file:
    	b = ''
    	while True:
    		c = file.read(1024)        
    		if not c:
    		    break
    		b += c
    print(b)
  • readline()
    >该方法可以用来读取一行内容
    和read()差不多

  • readlines()
    >该方法用于一行一行的读取内容,并且会一次性将读取到的内容封装到一个列表中返回

文件的写入

  • 使用open()打开文件时必须要指定打开文件所需要的操作,(读,写,追加)

  • 如果不能指定操作类型,则默认是读取文件,而读取文件时,是不能向文件中写入的

    r 表示只读
    w 表示可写的,使用w来写入文件时,如果文件不存在会创建该文件,如果存在就会清空重新写
    a 表示追加内容 如果问阿金不存在会创建文件,如果文件存在则会向文件中追加内容
    x 用来新建文件,如果文件不存在则创建,存在则报错

    • + 为操作符增加功能

      r+ 即可读又可写
      w+ 在写中加入了读的功能
      a+ 在追加中加入了读的功能

  • write()

  • 用来向文件中写入内容

  • 如果操作的是一个文本文件的话,则write()需要传递一个字符串作为参数,就是要写入的内容

  • 该方法会多次向文件中写入内容

  • 写入完成后,该方法会返回写入的字符个数

    with open('hhh.txt','w',encoding='utf-8') as file :
    	# 写入文件
    	file.write('hhh,hello,python\n')
    	file.write('hhh,hello,world\n')
    	file.write('hhh,hello,lmk\n')
    	file.write('hhh,hello,genji\n')
      # 每次写入完成后file就会返回写入的字符串的个数(长度)

文件

  • 读取模式

    t 读取文本文件(默认值)
    b 读取二进制文件

  • 读取文本文件

    with open('hhh.txt','rt',encoding='utf-8') as file :
        file.read(10)
    # 读取文本文件时size是以字符为单位的
    # 这里读取了10个字符
  • 读取二进制文件

    with open('hhh.txt','rb') as file :
        file.read(1024)
    # 读取二进制文件时size是以字节为单位的
    # 这里读取了1024个字节 也就是 1024b
  • 将一个音乐文本读取然后写入到另一个文本中

    a = 'C:/Users/12482/Music/キセキ - GReeeeN.ncm'
    
    with open(a,'rb') as file:
    	b = 'aa.ncm'
    	with open(b,'wb') as files:
    		while True:
    		    c = file.read(2048)
    		    if not c:
    		        break
    		    files.write(c)
  • 读取文件的位置

  • seek()

    这个函数可以修改文件当前读取的位置,和光标差不多

  • seek() 需要两个参数

    1,要切换到的位置
    2,计算位置方式
    可选值,
    0,从头计算,默认值 切换到的位置当做开头
    1,从当前位置计算 从当前位置往后读切换的位置的数
    2,从最后位置开始计算

    #     file_obj.seek(55) 从第55个字符或字节开始读或写
    #     file_obj.seek(80,0)  就是从 80个字符或字节开始读或写
    #     file_obj.seek(70,1) 从当前位置往后在读 70个字符或字节
    #     file_obj.seek(-10,2) 从最后十个开始读或写
  • tell()

    该方法用来查看当前读取的位置

    例:
    	print(file.tell())
        # 查看当前文件读取到哪里了

本博客所有文章是以学习为目的,如果有不对的地方可以一起交流沟通共同学习 邮箱:1248287831@qq.com!