江西农业大学Python期末复习4文件操作python异常处理

Python文件操作

  • 1.文件操作
    • 1.1Python中文件的打开和关闭
    • 1.2文件的读/写操作
    • 1.3文件的目录操作
    • 1.4CSV文件操作
  • 2.Python异常处理

1.文件操作

1.1Python中文件的打开和关闭

  • 打开文件(open):
    建立用户程序与文件的联系,为文件分配一个文件缓冲区,声明文件的地址、名称及文件的处理方式等。

    open()函数经常用的函数有3个,分别是filename(文件名称),mode(打开模式),encoding(文件编码方式)。其中filename不可以省略,其他参数都可以省略

  • 文件读/写操作(read/write):
    对文件的读、写、追加、和定位操作。从磁盘将数据缓冲到内存的过程称为“读文件”,从内存将数据存到磁盘的过程称为“写文件”。

  • 关闭文件夹(close)
    切断文件与用户程序的联系,把文件缓冲区的数据全部写入磁盘,释放掉该文件占用的缓存区空间,以免造成数据丢失。

  • 访问模式

    访问模式 说明
    r 以只读的方式打开文件。文件的指针将会放在文件的开头
    w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    b 二进制模式。
    t 文本模式 (默认),也是系统默认的文件打开方式。
    + 打开一个文件进行更新(可读可写)。
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
    wb 二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
  • 实验

    #只读方式打开文件并遍历输出结果
    f2=open("D:\\java实验课作业\\abcd.txt",'r')
    for line in f2:
        print(line)
    f2.close()#运行结果
    ababababcdcdefg
    
    
    
  • 指定编码类型

    文件默认的编码依赖于平台。在Windows系统中,默认编码诶CP939;在Linux系统中,系统默认编码为UTF-8.代码在不同平台上将会有不同的表现。因此,当以文本模式处理文件时,要指定编码类型。

    #以特定编码方式打开文件
    #文件默认编码
    f1=open("abcd.txt")
    print('文件的默认编码方式为:',f1.encoding)
    f1.close()
    #打开文件时指定编码类型
    f2=open('abcd.txt',mode='r',encoding='utf-8')
    print('文件的默认编码方式为:',f2.encoding)
    f2.close()
    
    #运行结果
    文件的默认编码方式为: cp936
    文件的默认编码方式为: utf-8
    
  • 关闭文件

    #三种方式关闭文件
    #(1)常规方式
    print("(1)常规方式:")
    f1=open('abcd.txt')
    f1.close()
    #(2)异常处理方式
    print('(2)异常处理方式:')
    try:
        f2=open('abcd.txt')
    finally:
        f2.close()
    #(3)使用with语句方式
    print('(3)使用with语句方式:')
    with open('abcd.txt') as f3:
        pass
    #运行结果
    (1)常规方式:
    (2)异常处理方式:
    (3)使用with语句方式:
    

1.2文件的读/写操作

  • 文件的读操作

    • read()方法

      read()方法一次性读取文件的所有内容,并存放在一个大字符串中.

      #使用read方法读取文本文件
      with open('abcd.txt',mode='r',encoding='utf-8') as f1:
          print(f1.read(2))
          print(f1.read(2))
          print(f1.read(6))
          print(f1.read(8))#abcd.txt中内容为“ababababcdcdefg张三李四王国武”
          
      #运行结果
      ab
      ab
      ababcd
      cdefg张三李
      
    • readline()方法

      readline()方法是逐行读取文本文件,结果是一个list。

      #使用readline方法读取文本文件
      '''
      abcd.txt中内容如下:
      ababab
      ab
      cdcdefg
      张三李四王国武
      '''
      with open('abcd.txt',mode='r',encoding='utf-8') as f1:
          line=f1.readline()
          while line:
              line = line.rstrip('\n')
              print(line)
              line = f1.readline()
      #运行结果
      ababab
      ab
      cdcdefg
      张三李四王国武
      
    • readlines()方法

      readlines()方法一次性读取文本的所有内容,结果是一个list。readlines()读取的文件内容中,每行末尾都会带一个“\n”换行符

      with open('abcd.txt',mode='r',encoding='utf-8') as f1:
          for line in f1.readlines():
              line_str=line.rstrip('\n')
              print(line_str)
      #运行结果
      ababab
      ab
      cdcdefg
      张三李四王国武
      
    • write()方法

      with open('teacher.txt',mode='w',encoding='utf-8') as f1:
          f1.write("我会使用Python程序设计!")
          f1.write("\n")
          f1.write("让我来教大家学习Python程序设计。")
          f1.write("\n")
          #读操作
      with open('teacher.txt',mode='r',encoding='utf-8') as f2:
          for line in f2.readlines():
              line_str=line.rstrip('\n')
              print(line_str)
      #运行结果
      我会使用Python程序设计!
      让我来教大家学习Python程序设计。
      
      #w+是读入之后重写覆盖,a+是读入后追加,r只能读,将指针放开头,+是更新的意思,r+就代表只能更新已有的文件,否则包找不到文件的错误,
      
    • writelines()方法

      list = ('先易后南,','\n','循序渐进','\n')
      with open('teacher.txt',mode='a',encoding='utf-8') as f2:
          f2.writelines(list)
      with open('teacher.txt',mode='r',encoding='utf-8') as f4:
          for line in f4.readlines():
              line_str=line.rstrip('\n')
              print(line_str)
      #运行结果
      我会使用Python程序设计!
      让我来教大家学习Python程序设计。
      先易后南,
      循序渐进
      

1.3文件的目录操作

Python中有一个os模块,os提供了许多便利的方法来管理文件和目录。

#os.remove()方法:使用remove方法来删除文件
import os
file_name='test.txt'
if os.path.exists(file_name):
    os.remove(file_name)
    print(file_name+"文件删除成功")
else:
    print(file_name+'文件未找到')

    
    
#os.mkdir()方法:创建指定名称的目录
import os
dir_str=os.getcwd()#os.getwd()查看当前目录位置,便于接下来检查所要创建的目录是否存在,然后在创建目录
my_dir="PythonFile"
if not os.path.exists(my_dir):
    os.mkdir(my_dir)
    print("当前目录为:"+dir_str+"。在该目录下,"+my_dir+"目录创建成功!")
else:
    print("当前目录为:"+dir_str+"。在该目录下,"+my_dir+"目录已经存在!")
#运行结果
# 当前目录为:D:\pycharm\py代码\Python期末。在该目录下,PythonFile目录创建成功!



#使用rmdir()方法来删除目录
import os
dir_str=os.getcwd()
my_dir='PythonFile'
if os.path.exists(dir_str):
    os.rmdir(my_dir)
    print(my_dir+"目录以删除成功!")
else:
    print(my_dir+'目录未找到!')
#运行结果
#PythonFile目录以删除成功!




#使用os.system()方法来完成文件或目录操作
import os
dir_str=os.path.dirname(__file__)
os.system('cls')
os.system('mkdir PythonFile2')
os.system('copy teacher.txt PythonFile2\\teacher2.txt')
file_name=dir_str+"PythonFile2\\teacher2.txt"
os.system("notepad"+file_name)
#运行结果可以看到一个新创建的PythonFile2文件目录,其中teacher2.txt是由teacher.txt复制得到的




#使用os.rename()为文件重命名
import os
file_name='abcd.txt'
file_name_new='test_new.txt'
if os.path.exists(file_name):
    os.rename(file_name,file_name_new)
    print("文件冲命名为:"+file_name_new)
else:
    print(file_name+"文件不存在!")
#文件冲命名为:test_new.txt




#使用walk()方法来搜索指定目录及其子目录
#os.walk返回包括3个元素的元组(dirpath,dirname,filenames)
#dirpath:以字符串的形式返回该目录下的绝对路径
#dirname:以列表的形式返回每一个绝对路径下的目录
#filename:以列表的形式
import os
cur_path=os.path.dirname(__file__)
cur_path+='/PythonFile2'
sample_tree=os.walk(cur_path)
for dir_name,sub_dir,files in sample_tree:
    print('文件路径:',dir_name)
    print('目录列表:',sub_dir)
    print('文件列表:',files)
##运行结果
# 文件路径: D:/pycharm/py代码/Python期末/PythonFile2
# 目录列表: []
# 文件列表: ['teacher2.txt']

1.4CSV文件操作

  • 一维数据保存成CSV格式后,各元素采用逗号分隔,形成一行。从Python表示到数据存储,需要将列表对象输出为CSV格式以及将CSV格式读入列表对象。采用join方法最为常见。
#将一维数据写入CSV格式文件
list=['苹果','葡萄','香蕉','西瓜']
f1=open("shuiguo.csv",'w',encoding='utf-8')
f1.write(','.join(list)+'\n')
f1.close()



#从csv格式文件读取一维数据
f2=open("shuiguo.csv",'r',encoding='utf-8')
list=f2.read().strip('\n').split(',')
f2.close()
print(list)
#运行结果
['苹果','葡萄','香蕉','西瓜']
  • 二维数据是由多条一维数据构成的,因此也可以用列表表示。
#将二维数组写入CSV格式文件

list=[
    ['水果名称','单价','个数','金额'],
    ['葡萄','20','2.5','50'],
    ['苹果','30','5','150'],
    ['西瓜','50','6','300']
]
f3_name='shuiguoqingdan.csv'
f3=open(f3_name,'w',encoding='utf-8')
for row in list:
    f3.write(','.join(row)+'\n')
print("数据写入",f3_name,'成功')
f3.close()


#从csv格式文件读取二维数据
f4_name='shuiguoqingdan.csv'
f4=open(f4_name,'r',encoding='utf-8')
list=[]
for line in f4:
    list.append(line.strip('\n').split(','))
f4.close()
print(list)
#运行结果
# [['水果名称', '单价', '个数', '金额'], ['葡萄', '20', '2.5', '50'], ['苹果', '30', '5', '150'], ['西瓜', '50', '6', '300']]

2.Python异常处理

你可能感兴趣的:(Python学习,python,linux,开发语言)