2022年 11月 7日

python文件处理——文本文件

python文件处理——文本文件


  hello!我是wakeyo_J,每天一个konwledge point,一起学python,让技术无限发散。


文本文件

  • python文件处理——文本文件
  • 1. 建立文件
    • 1.1 文本文件代码实现
    • 1.2 代码编写分析
  • 2. 基本的读写文件
    • 2.1 用文件对象write(s)方法写内容
    • 2.2 用文件对象read()方法读取内容
    • 2.3 连续用read()方法、write()方法操作文件
  • 3. 复杂的读写文件
  • 4. 文件异常处理
  • 5. 文件与路径
    • 5.1 与路径相关的操作
    • 5.2 动态指定路径下建立新文件
  • 总结

文本文件具备初步存放、编辑各类数据的能力,并可以持久保留和数据共享。

1. 建立文件

  建立文本文件有两种途径:一是通过Windows的“记事本”工具创建一个扩展名为“.txt”的文件,然后供程序调用。二是通过程序自动建立新文件。

1.1 文本文件代码实现

newfile = "g:\\t1.txt"   #定义需要建立的文本名称和路径
b_new_file = open(newfile,"w")     #用open函数建立一个新的文本文件
b_new_file.close()     #关闭文件
print("%s成功建立!"%newfile)
  • 1
  • 2
  • 3
  • 4

效果:
在这里插入图片描述

在这里插入图片描述

1.2 代码编写分析

  1. 文本文件的名称
    (1)文本名称,命名要符合命名内容,一般情况下以英文字母、数字、汉字开头的易于阅读的字符串组合。不能使用星号(*)等特殊符号开头的命名。
    (2)文本名称是一个字符串,命名过程中需要考虑到转义符号对路径或名称的影响。如:“g:\t1.txt”中的“\t”本身就是一个横向制表符,如果用“g:\t1.txt”就会出错。另一种解决字符串转义符的方法是在字符串前加原始字符串限制符号(原生字符r或R)可以原样输出r“g:\t1.txt”。
    (3)指定路径必须设置(在不同的解释器中,对于路径的设置有区别)
  2. 用open函数建立(打开)文件
    open函数属于系统内置函数,支持对字符串或二进制文件的打开操作,返回可操作的文件对象。
    使用格式:

open(file,mode=“w”)

  file参数用于指定需要操作的文件名(可以同时只当文件路径);mode参数用于指定需要操作的方式。
在这里插入图片描述
  r、w、x、a为打开文件的基本模式,对应这只读、只写、新建、追加四种打开方式;b、t、+、U与基本模式组合使用,对应二进制、文本、读写、通用换行符四种模式。
  mode默认值为“rt”模式,意味着对文本文件进行读操作。目前,mode值常见可以组合的方式为“rb”、”wb“、”xb“、”ab“、”rt“、”wt“、”xt“、”at“、”r+“、”w+“、”x+“、”a+“。

  1. 用b_new_file.close()方法把新建立的文件关闭
      如果不关闭新建立的文本文件,则打开的文件对象一直留存在内存中,如果打开的文件多了,容易出现内存溢出等错误。

2. 基本的读写文件

  打开文本文件后,可以对文件进行基本的读写操作。

2.1 用文件对象write(s)方法写内容

  f.write(s),f代表可写方式打开文件对象;s为将要写入文件的内容,write()方法把s内容写入文件f后,返回写入的字节数。

newfile = "g:\\t1.txt"   #定义需要建立的文本名称和路径
b_new_file = open(newfile,"w")     #用open函数建立一个新的文本文件
t_n = b_new_file.write("l like python!")   #用文件对象write()方法写字符串
b_new_file.close()     #关闭文件
print("往文件里写入%d字节内容"%t_n)
  • 1
  • 2
  • 3
  • 4
  • 5

效果:
在这里插入图片描述
在这里插入图片描述
  ”w“模式打开的文本文件,在写入内容时,第二次写入的内容会覆盖第一次保存的内容,若要解决此问题,采用”a“模式打开文件。

2.2 用文件对象read()方法读取内容

  f.read(size),f代表可读方式打开的文件对象;size为可选参数,若指定读取字节数,则读取指定大小字节的内容,若没有指定,则读取尽可能大的内容。

b_new_file = open(newfile,"r")      #以只读方式打开文件
tt = b_new_file.read()           #用文件对象read()方法读取内容
print(tt)
b_new_file.close()
  • 1
  • 2
  • 3
  • 4

效果:
在这里插入图片描述

2.3 连续用read()方法、write()方法操作文件

b_new_file = open(newfile,"r+")     #用open函数建立一个新的文本文件
tt = b_new_file.read()           #用文件对象read()方法读取内容
print(tt)
t_n = b_new_file.write("\n三酷猫!^_^")     #继续往文件里写入新内容
b_new_file.close()
print("往文件里写入%d字节内容"%t_n)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

效果:
在这里插入图片描述

注意:不鼓励连续读写操作方法,因为存在读写数据不确定性问题

3. 复杂的读写文件

  在基础的读写存在上,可以考虑多行读写的操作。

  1. 一次写入多行
nums = ["one","two","three","four","five","six","seven"]
t = open(r"g:\t2.txt","a")    #追加打开文件
for get_one in nums:
    t.write(get_one+"\n")     #将每个元素循环写入文件,行末加\n
t.close()
print("连续写入完成")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

效果:
在这里插入图片描述
在这里插入图片描述

  1. 一次读一行
      f.readline(s),f代表以可读模式打开的文件;s为可选参数,若设置指定大小的字节,则返回相应大小的字符串,若没有设定,则以行单位返回字符串。
t1 = open(r"g:/t2.txt","r")
dd = 1
while dd:
    dd = t1.readline()    #一次读一行
    print(dd.strip())      #strip()去除字符串两端的空字符
  • 1
  • 2
  • 3
  • 4
  • 5

效果:
在这里插入图片描述

  1. 以列表格式读取多行
t1 = open(r"g:/t2.txt","r")
t_s = t1.readlines()            #以列表格式读取多行
print(t_s)
  • 1
  • 2
  • 3

效果:
在这里插入图片描述

  1. 连续读特定字节数量的内容
f = open(r"g:/t2.txt","r")
print(f.readline(2))         #读取文件头2个字节
print(f.readline())          #继续读取同一行,剩余字节
print(f.read(4))             #继续读取4个字节
print(f.read(4))
  • 1
  • 2
  • 3
  • 4
  • 5

效果:
在这里插入图片描述

  1. 在指定位置读内容
    5.1 f.tell(),f代表打开的文件,tell()方法返回当前文件可以写入读写的位置(字节数)
f = open(r"g:/t2.txt","r")
print(f.readline(2))         #读取文件头2个字节
print(f.readline())          #继续读取同一行,剩余字节
print(f.read(4))             #继续读取4个字节
print(f.read(4))
print(f.tell())    #获取执行上述操作后的当前位置
print(f.read(1))
print(f.tell())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

效果:
在这里插入图片描述
  5.2 f.seek(offset[,whence])
  f代表以打开的文件,seek()方法重新指定将要读写的当前位置。offset参数设置位置的偏移量的字节数,whence参数可选,确定文件起计位置,默认值为SEEK_SET(或0),代表从文件大的开始位置+偏移量来确定当前位置;SEEK_SET(或1),代表当前位置起计;SEEK_END(或2),代表从文件的结尾起计。

print(f.seek(17))
print(f.read(4))
  • 1
  • 2

效果:
在这里插入图片描述

  1. 在指定位置写内容
f3 = open(r"g:/t2.txt","w")
print(f3.seek(17))
f3.write('---')
f3.close()
  • 1
  • 2
  • 3
  • 4

效果:
在这里插入图片描述

在这里插入图片描述

4. 文件异常处理

f_n = r"g:\t3.txt"
flag = False
try:                    #异常捕捉开始
    f = open(f_n,"r")   #打开t3.txt文件
    print(f.read())
    flag=True
except:                 #捕捉异常
    print("打开%s文件出错,请检查!"%f_n)      #出错提示
finally:                #是否出错,都强制执行下列代码
    if flag:            #如果文件打开顺利
        f.close()       #则关闭文件
        print("文件做关闭处理!")
    else:               #文件打开出现异常
        print("程序关闭")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

效果:
在这里插入图片描述

5. 文件与路径

5.1 与路径相关的操作

  1. 获取程序运行的当前路径
    os.path.abspath§,abspath()以字符串形式为返回平台归一化的绝对路径,p为指定的路径名称(字符型),若p为指定”(.)“,则代表当前路径。
import os
print(os.path.abspath(os.path.curdir))   #返回当前绝对路径
  • 1
  • 2

效果:
在这里插入图片描述

  1. 判断指定路径下是否存在文件
import os
print(os.path.exists(r"g:\\t1.txt"))        #用exists()方法判断文件是否已经存在
  • 1
  • 2

效果:
在这里插入图片描述
  exists§方法判断指定路径下的文件是否存在。若存在,则返回True,若不存在,则返回False。p为指定的来路径的文件字符串,也可以通过isfile()方法直接判断。

  1. 判断指定路径是否存在
    isdir§方法判断指定路径是否存在,p为字符串格式的路径,存在返回True,不存在则返回False。
import os
print(os.path.isdir(r"g:\\"))       #用isdir()方法判断路径是否存在
  • 1
  • 2

效果:
在这里插入图片描述

  exists§方法也可以用来直接判断路径

import os
print(os.path.exists(r"g:\\"))        #用exists()方法直接判断路径
  • 1
  • 2

效果:
在这里插入图片描述

  1. 建立文件夹(子路径)
    利用os模块的makedirs§方法可以建立对应的文件夹,p为字符串形式的需要建立的路径,建立不成功,抛出OSError出错信息;建立成功,则在对应的路径下将发现新建立的文件夹。
import os
print(os.makedirs(r"g:\\files"))      #在g盘建立files文件夹
  • 1
  • 2

效果:
在这里插入图片描述
在这里插入图片描述

5.2 动态指定路径下建立新文件

import os
import sys

get_cur_path = os.path.abspath(os.path.curdir)
f_n = get_cur_path+"\\files"   #在当前路径建立子路径files
try:
    if not os.path.isdir(f_n):   #确认路径是否存在
        os.makedirs(f_n)         #不存在,建立子路径
except:                          #建立子路径过程发生异常
    print("子文件夹%s建立出错!"%f_n)   #提示建立出错
    sys.exit()                      #退出程序

f_n = f_n+"\\t3.txt"
flag = False
try:
    f =open(f_n,"w")
    print(f.write("ok"))
    flag=True
    print("文件%s写入正常!"%f_n)
except:
    print("打开%s文件出错,请检查!"%f_n)
finally:
    if flag:
        f.close()
        print("文件做关闭处理!")
    else:
        print("程序关闭")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

效果:
在这里插入图片描述

在这里插入图片描述


总结

  本文属于作者原创,转载请注明出处,不足之处,希望大家能过给予宝贵的意见,如有侵权,请私信。每天一个knowledge point,一起学python,让技术无限发散