python基础篇{文件操作}

 python基础学习路线:

   · 数据分析之python基础篇{基础语法}
   · 数据分析之python基础篇{数据类型}
   · 数据分析之python基础篇{控制流语句}
   · 数据分析之python基础篇{函数}
   · 数据分析之python基础篇{模块}
   · 数据分析之python基础篇{文件操作}
   · 数据分析之python基础篇{Pymysql}
   · 数据分析之python基础篇{面向对象}

打开文件

  在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件名,访问模式)

f = open('drrrink.txt','r',encoding='UTF-8')

  文件名如果没有指定当前文件夹路径,那么是默认在当前文件夹寻找的, 也可以指定文件路径寻找文件 只需要在文件名前加入文件的路径即可,f = open('E:\代码\数据分析\00、配套的学习资料(课件 数据、软件等)\\example.txt','r',encoding='UTF-8')

  此外文件夹的访问模式默认是读模式,就是说,只可以读,不能修改。如果只要指定访问模式,可以直接在open函数内第二参数填写即可。

  常见的编码: UTF-8,GBK,一般来说encoding = ’UTF-8‘是要写的。

访问模式

访问模式说明
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

文件的关闭

  执行文件操作时,最后一定不能忘记的操作是关闭文件,即使报错了也要 close。普通的方式是在 finnally 块中显示的调用 close 方法。

  如果不关闭文件:

  • 会导致内存始终被占用, 得不到释放
  • 会导致文件被占用中, 无法删除, 剪切等操作
f = open('drrrink.txt',encoding='UTF-8')
f.close()
# 这是会在内存中释放文件, 文件才可以删除

文件的读写

读数据read()

  使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

  read函数只可以读取一次

f = open('drrrink.txt',encoding='UTF-8')
type(f)
data = f.read()# 没有传入num,读取文件中所有的数据。
print(data)
f.close()
f = open('drrrink.txt', 'r',encoding='UTF-8')
content = f.read(5) # 指针向后阅读5个位置
print(content)
print("-"*30)
content = f.read()
print(content)
f.close()

  注意:

  • 如果open是打开一个文件,那么可以不用写打开的模式,即只写 open('test.txt')
  • 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的
f = open('drrrink.txt', 'r',encoding='UTF-8')
content = f.read(3)
print(content)
f.read(3) # 读进来就是一个字符串
f.close()

将txt文件里表格形式处理成列表

f= open("student_grade.txt", 'r',encoding='UTF-8')
data = f.read()
data.splitlines() # 处理成列表
# 新建一个空列表
student_garde = []
for line in data.splitlines():
    student_garde.append(line.split('\t'))
print(student_garde)

将txt文件里表格形式处理成字典

f= open("student_grade.txt", 'r',encoding='UTF-8')
data = f.read()
data.splitlines()
# 定义一个空字典
student_dict = {}
for line in data.splitlines():
    t = line.split('\t')
    student_dict[t[0]] = t[1:]
student_dict['刘帅']
student_dict['刘帅'][-1]

读数据readlines
  就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

f = open("决策树的几个辅助函数.ipynb", "r", encoding='utf-8')
data = f.readlines()

写数据

content = '''hahahahahahahhauihdquihgdasuighdpiad'''
f = open('mengyou.txt','w',encoding= 'UTF-8') # w模式下可以对文件进行写操作
f.write(content) # 写入后,一定要关闭文件
f.close()

  如果文件内没有内容,w模式下的write可以直接进行写操作,但是如果本身文件内有内容的话。w模式下的write会直接覆盖直接写的内容。

追加模式

 # 不想删除原来的,想在后面追加新的内容
f = open('mengyou.txt','a',encoding ='UTF-8')
al = '''德玛西亚之力''
f.write('\n\n')
f.write(al)
f.close()

练习

我有一个梦想

  • 复制中文版文章内容,赋值给变量
  • 写入到本地文件中,名称为 我有一个梦想.txt
  • 重新打开文件, 在文件后面追加 英文版内容
  • 以读取方式打开文件, 把文件内容按换行符进行分割操作
dream = '''链接内的内容'''
f = open('我有一个梦想.txt','a',encoding='UTF-8')
f.write(dream)
f.close()
dream1 = '''英文版内容'''
f = open('我有一个梦想.txt','a',encoding='UTF-8')
f.write('\n\n')
f.write(dream1)
f.close()
f = open('我有一个梦想.txt','r',encoding='UTF-8')
data = f.readlines()
f.close()

文件的重命名、删除

  有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这么功能

文件重命名

  os模块中的rename()可以完成对文件的重命名操作,rename(需要修改的文件名, 新的文件名)

import os
os.rename("我有一个梦想.txt", 'dream.txt')

删除文件

  os模块中的remove()可以完成对文件的删除操作,remove(待删除的文件名)

import os

os.remove("我不太会了.txt")

文件夹的相关操作

import os
os.mkdir('中国河南大学') # 创建了文件夹名叫中国河南大学
os.getcwd() # 获取文件夹的路径
os.listdir() # 获取当前的目录内容
os.rmdir("中国河南大学") # 删除文件夹

练习

制作文件的备份

# 新建一个用于备份的文件夹
# 获取待备份文件夹中的所有文件夹列表
# 循环依次使用open()读入文件,然后写入到指定的文件夹中
from datetime import datetime
dt = datetime.now()
time = dt.strftime('&Y%m%d') #时间字符串

pre = '新备份文件'
import os
if not os.path.exists('备份文件夹'):
    os.makedirs('备份文件夹')
for filename in os.listdir('应用'):
    f = open('应用/'+filename,'r',encoding='utf-8')
    data = f.read()
    f.close()
    # 写文件
    f = open('备份文件夹/'+time+'_'+pre+'_'+filename,'w',encoding='UTF-8')
    f.write(data)
    f.close()

批量修改文件名

import os
os.mkdir('应用')
# 获取文件夹下面的所有文件
os.listdir('应用')
pre = '[备份文件]-'
for filname in os.listdir('应用'):
    os.rename('应用/'+filname,'应用/'+pre+filname)
 # 如果想修改文件夹内的txt文件,可以这么写
 # 只改txt文件
for filname in os.listdir('应用'):
    # 判断是不是txt
    if filname[-4:] == '.txt':
        os.rename('应用/'+filname,'应用/'+pre+filname)

附录: os方法大全

import os

print(os.getcwd())        # 获得当前工作目录
print(os.chdir("dirname")) # 改变当前脚本的工作路径,相当于shell下的cd
print(os.curdir)            # 返回当前目录‘.'
print(os.pardir)            # 获取当前目录的父目录字符串名‘..'
print(os.makedirs('dirname1/dirname2'))     # 可生成多层递归目录
print(os.removedirs('dirname1/dirname2'))      # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
print(os.mkdir('test4'))         # 生成单级目录;相当于shell中mkdir dirname
print(os.rmdir('test4'))        # 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
print(os.listdir('/pythonStudy/s12/test'))   # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
print(os.remove('log.log'))            # 删除一个指定的文件
print(os.rename("oldname","newname"))    # 重命名文件/目录)
print(os.stat('/pythonStudy/s12/test'))     # 获取文件/目录信息
print(os.pathsep)            # 输出用于分割文件路径的字符串';'
print(os.name)               # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
print(os.system(command='bash'))   # 运行shell命令,直接显示
print(os.environ)                  # 获得系统的环境变量
print(os.path.abspath('/pythonStudy/s12/test'))   # 返回path规范化的绝对路径
print(os.path.split('/pythonStudy/s12/test'))     # 将path分割成目录和文件名二元组返回
print(os.path.dirname('/pythonStudy/s12/test'))    # 返回path的目录。其实就是os.path.split(path)的第一个元素
print(os.path.basename('/pythonStudy/s12/test'))   # 返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
print(os.path.exists('test'))                 # 判断path是否存在
print(os.path.isabs('/pythonStudy/s12/test'))    # 如果path是绝对路径,返回True
print(os.path.isfile('test'))                   # 如果path是一个存在的文件,返回True。否则返回False
print(os.path.isdir('/pythonStudy/s12/test'))    # 如果path是一个存在的目录,则返回True。否则返回False
print(os.path.getatime('/pythonStudy/s12/test'))   # 返回path所指向的文件或者目录的最后存取时间
print(os.path.getmtime('/pythonStudy/s12/test'))   # 返回path所指向的文件或者目录的最后修改时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值