一、python的文件操作介绍

  1、文件操作函数介绍

    

 open() 打开一个文件
  语法:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  含义:
    file: 必需,文件路径(相对或者绝对路径)。
    mode: 可选,文件打开模式
    buffering: 设置缓冲
    encoding: 一般使用utf8
    errors: 报错级别
    newline: 区分换行符
    closefd: 传入的file参数类型
    opener:
  使用:open() 函数常用形式是接收三个参数:文件名(file)和模式(mode)和字符编码(encoding)。
  open("./file/login.txt", encoding="utf-8", mode="rb+")   write() 将字符串写入文件,返回的是写入的字符长度
read() 从文件读取指定的字节数,如果未给定或为负则读取所有。
readline() 读取整行,包括 "\n" 字符。(通常使用此方法进行读取)
readlines() 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力
next()返回文件下一行
seek()设置文件当前位置 seek(0) 返回到首行
tell()返回文件当前位置。
close() 关闭打开的文件


  2、文件操作模式

    

mode:
r : 读(指针在开头,不会创建文件,不会覆盖)
r+ : 读写(指针在开头,不会创建文件,不会覆盖)
w : 写(指针在开头,会创建文件,会覆盖)
w+ : 写读(指针在开头,会创建文件,会覆盖)
a : 写(指针在结尾,会创建文件,不会覆盖)
a+ : 写读(指针在结尾,会创建文件,不会覆盖)
b : 一般用以读取非文本文件的数据,如:音频、图片等,读取的是流的形式 # 读写模式
模式 r r+ w w+ a a+
读  + + + +
写     + + + + +
创建             + + + +
覆盖        + +
指针在开始 + + + +
指针在结尾     + +

二、python的文件内容增删改查

  1、文件的读取方式

    语法一:  

f = open("./login.db", encoding="utf-8", mode="r")
print(f.read()) # 读取全部
print(f.readline()) # 读取一行
print(f.readlines()) # 读取全部,每一行会生成一个数组
f.close() # 这种形式的文件操作一定记得操作完进行关闭

    语法二:

# 这种形式的默认读取完毕后会自动执行f.close()
with open("./file/login.txt", encoding="utf-8", mode="r") as f:
print(f.read()) # 读取全部
print(f.readline()) # 读取一行
print(f.readlines()) # 读取全部,每一行会生成一个数组

    语法三:

# py157431816730404$###$赵八万$###$202cb962ac59075b964b07152d234b70$###$女$###$2000-03-05$###$赚八万$###$2019-11-21 14:36:07

# 方式一
with open("./file/login.txt", encoding="utf-8", mode="r") as f:
for line in f:
print(line.strip().split("每行截取的字符串")) # 打印每一行数据 # 方式二
with open("./file/login.txt", encoding="utf-8", mode="r") as f:
# enumerate() 获取key和value
for k, line in enumerate(f):
# strip() 去除两端的空格换行
# replace(旧字符,新字符) 替换字符串中的某个字符串
print("id: %s %s" % line.strip().replace("$###$", " | ")) # 打印每一行数据

  2、文件的添加

    语法一:

# 方式一
f = open("./login.db", encoding="utf-8", mode="w")
f.write("你好,我要拥抱全世界") # write只能写字符串格式
f.close() # 方式二
with open("./login.db", encoding="utf-8", mode="w") as add:
# join() 用###把一个数组的每个value串联拼接为一个字符串
add.write("###".join(["张三", "", "男", "吃饭、睡觉、打豆豆"]))

    语法二(写非文本文件):

# 方式三(读取图片写到另一个文件中)
with open("./123.jpg", mode="rb") as f, \
open("./456.jpg", mode="wb") as add:
add.write(f.read()) # 将读取到的图片流写入到另一个图片中

  3、文件的修改

    方式一:

# 执行修改文件的操作(最简单的修改)
with open("./emp_new.txt", mode="w", encoding="utf-8") as f_add, \
open("./emp.txt", mode="r", encoding="utf-8") as f:
for k, v in enumerate(f): # 逐行获取用户信息
if k == int(ids): # 如果相等就进行修改
lit_info = v.strip().split("###") # 获取用户单行的信息
lit_info[0] = input("请输入员工名称:")
lit_info[1] = input("请输入员工爱好:")
lit_info[2] = input("请输入员工薪资:")
f_add.write("###".join(lit_info)+"\n")
else: # 不相等就复制
f_add.write(v)
os.remove("./emp.txt")
os.rename("./emp_new.txt", "./emp.txt")
print("修改成功")

    方式二:

# 这种方式不需要改名字,但是只适用于文件比较小的时候,文件太大不要这样读取
file_content = "" # 定义一个变量用来存储数据
with open("./emp.txt", mode="r", encoding="utf-8") as f:
for k, line in enumerate(f): # 逐行获取用户信息
ids = input("请输入需要修改的员工ID:")
if k == int(ids): # 如果相等就进行修改
name = input("请输入员工名称:")
hobby = input("请输入员工爱好:")
salary = input("请输入员工薪资:")
new_str = "###".join([name, hobby, salary]) + "\n"
file_content += new_str
else:
file_content += line with open("./emp.txt", mode="w", encoding="utf-8") as f_add:
f_add.write(file_content)

    方式三:

import os
ids = input("请输入需要修改的员工ID:")
name = ""
birthday = ""
salary = ""
while 1:
print("""
请输入需要修改的员工信息
over:结束
1:修改名称
2:修改爱好
3:修改薪资
""")
staff_info = input("输入需要修改的属性,如果不修改输入over:")
if staff_info.upper() == "OVER": # 结束跳出
break
elif staff_info.upper() == "NEXT": # 跳过属性的输入
continue
elif staff_info == "":
name = input("请输入员工名称:")
elif staff_info == "":
birthday = input("请输入员工爱好:")
elif staff_info == "":
salary = input("请输入员工薪资:")
else:
print("输入的信息不正确,请重新输入") with open("./emp_new.txt", mode="w", encoding="utf-8") as f_add, \
open("./emp.txt", mode="r", encoding="utf-8") as f:
for k, v in enumerate(f): # 逐行获取用户信息
if k == int(ids): # 如果相等就进行修改
lit_info = v.strip().split("###") # 获取用户单行的信息
print(lit_info)
if name:
lit_info[0] = name
if birthday:
lit_info[1] = birthday
if salary:
lit_info[2] = salary
f_add.write("###".join(lit_info)+"\n")
else: # 不相等就复制
f_add.write(v) os.remove("./emp.txt")
os.rename("./emp_new.txt", "./emp.txt")
print("修改成功")

    方式四:

import os
flag = False
# 循环判断输入的id格式是否正确以及文件中有没有当前id
while 1:
ids = input("请输入需要修改的员工ID:")
# isdigit() 判断一个字符是否是数字
if not ids.isdigit() or ids.isdigit() < 1:
print("输入的信息不正确,请重新输入")
else:
with open("./emp.txt", mode="r", encoding="utf-8") as f_check:
for k, v in enumerate(f_check): # 逐行获取用户信息
if k == int(ids): # 如果相等就进行修改
flag = True
break
else:
print("您找的用户信息不存在,请重新输入")
if flag: # 如果查找到了用户id就跳出循环
break
else: # 如果没有找到就继续循环while,重新输入id
pass # 没有意义,只是为了使语句完整,做占位符使用
# 执行修改文件的操作
with open("./emp_new.txt", mode="w", encoding="utf-8") as f_add, \
open("./emp.txt", mode="r", encoding="utf-8") as f:
for k, v in enumerate(f): # 逐行获取用户信息
if k == int(ids): # 如果相等就进行修改
lit_info = v.strip().split("###") # 获取用户单行的信息
lit_info[0] = input("请输入员工名称:")
lit_info[1] = input("请输入员工爱好:")
lit_info[2] = input("请输入员工薪资:")
f_add.write("###".join(lit_info)+"\n")
else: # 不相等就复制
f_add.write(v)
os.remove("./emp.txt")
os.rename("./emp_new.txt", "./emp.txt")
print("修改成功")

  4、文件的删除

    方式一:

import os  # 系统模块
ids = input("输入您要删除的id:")
with open("./login.db", mode="r") as f, \
open("./login_new.db", mode="w") as add:
for line in f:
# 文件类型 1001$###$py157431816730404$###$赵八万$###$202cb962ac59075b964b07152d234b70$###$女
user_info = line.strip().split("$###$")
     # 判断id 是否和用户中的id一致,如果一致就删除
if ids == user_info[0]: # user_info[0] 这个地方问的是用户自增id,唯一的
continue
else:
add.write(line) os.remove("./login.db") # 删除原有的文件
os.rename("./login_new.db", "./login.db") # 把新文件名改为原有的文件名

    方式二:

import os  # 系统模块
while 1:
ids = input("输入您要删除的id:")
# isdigit() 判断一个字符是否是数字
if not ids.isdigit() or ids.isdigit() < 1:
print("输入的信息不正确,请重新输入")
else:
break with open("./login.db", mode="r") as f, \
open("./login_new.db", mode="w") as add:
if f.readline(): # 先读取一行看看能不能取到数据,用来判断文件是否为空
f.seek(0) # 因为前面使用了f.readline(),这里需要把读取的指针重新放到开始位置,防止下面循环处理出问题
for k, line in enumerate(f):
# 文件字符类型 py157431816730404$###$赵八万$###$202cb962ac59075b964b07152d234b70$###$女
if int(ids) == (k + 1): # 如果用户信息没有存自增id,那么就以用户读取是的(下标+1)标识id
continue
else:
add.write(line)
else:
print("删除失败,该文件中没有数据") os.remove("./login.db") # 删除原有的文件
os.rename("./login_new.db", "./login.db") # 把新文件名改为原有的文件名

python的文件操作及简单的用例的更多相关文章

  1. python基本文件操作

    python文件操作 python的文件操作相对于java复杂的IO流简单了好多,只要关心文件的读和写就行了 基本的文件操作 要注意的是,当不存在某路径的文件时,w,a模式会自动新建此文件夹,当读模式 ...

  2. Python :open文件操作,配合read()使用!

    python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...

  3. Python 常见文件操作的函数示例(转)

    转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...

  4. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  5. 孤荷凌寒自学python第三十三天python的文件操作初识

     孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...

  6. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  7. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  8. Python常见文件操作的函数示例

    # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...

  9. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

随机推荐

  1. React学习系列之(1)简单的demo(React脚手架)

    1.什么是React? React是一个一个声明式,高效且灵活的用于构建用户界面的JavaScript库.React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 ...

  2. jmeter-中文乱码问题

    1.被测系统中问乱码 解决办法:接口请求时添加编码方式UTF-8

  3. git clone下代码window与unix换行问题

    项目中避免不了会写一些shell脚本,使用ln软连接到一个目录.当git clone到windows中,ln连接显示无比怪异(如../xx),打开.sh文件后(仅仅是打开了),git status会看 ...

  4. Spring Boot项目中如何定制PropertyEditors

    本文首发于个人网站:Spring Boot项目中如何定制PropertyEditors 在Spring Boot: 定制HTTP消息转换器一文中我们学习了如何配置消息转换器用于HTTP请求和响应数据, ...

  5. c语言-----劫持原理

    1. 劫持原理介绍 (1) 通过劫持技术我们可以实现某些进程的拦截,比如禁止创建文件,禁止打开qq,禁止关机等等一系列的操作 (2) 弹窗拦截就是最常见的一种劫持技术的实现. 2. 使用的工具 (1) ...

  6. Java基础(二十四)Java IO(1)输入/输出流

    在Java API中,可以从其中读入一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称为输出流. 输入流的指向称为源,程序从指向源的输入流中读取数据. 输出流的指向是字节要去的目的地, ...

  7. 以Mnist为例从头开始自己建立数据集,搭建resnet34,识别Mnist

    写在前面: 本人小白研一,刚开始学习深度学习,将自己的第一个实验过程总结下来,看了很多的大牛的博客,在下面的程序中也参考了很多大牛的博客.在刚开始入门的学习的时候,直接编写程序下载数据集,但是后来觉得 ...

  8. H5与CSS3常用设置

    1.设置div铺满全屏 对于一个div1,要使其属性height:100%生效,需要使其所有父元素,有确定的属性height.要铺满全屏,就是从html开始,所有的height为100%. 2.垂直居 ...

  9. 使用 Github + Hexo 从 0 搭建一个博客

    最近有几位同学在公众号后台留言问我的博客站是怎么建站的,思来想去,还是写一篇从 0 开始吧. 前置准备 我们先聊一下前置准备,可能很多同学一听说要自己搭一个博客系统,直接就望而却步.不得有台服务器么, ...

  10. CSPS模拟 81

    Z哥的题,真是见题如见人啊.. T1 实际状态数没有那么多,不要被数字吓倒就是了. 另外为什么吧轮廓线给忘了啊 T3 觉得自己是正解但是被hack了? 考试的时候想到了复杂度对的的解法,但是 spfa ...