文件操作之Python、json操作

文件操作步骤

  • 打开文件–open
  • 读写文件
    • 读:把文件的内容读到变量里–read
    • 写:把变量的值写到文件内容里–write
  • 关闭文件–close

读取第一个文件内容

  • 打开文件
    • file = open(r"要打开的路径和文件名","r")
    • file是一个变量名,代表文件操作对象
    • open的第一个参数一定要文件存在,如果文件不存在会报错
    • "r"意思是用只读方式打开文件
  • 读取文件内容
    • txt = file.read()
    • txt是定义一个变量,代表存放读取到的文件内容
    • file是上一个open返回的文件操作对象
    • read是file对象的一个方法,用来读取文件内容
  • 关闭文件
    • file.close()
    • 文件打开后一定要记得关闭
# 第一步:打开文件
file = open(r"E:\softwareTest\Python\file\a.txt","r",encoding='UTF-8')
# 第二步:读取文件内容
txt = file.read()
print(txt)   # 为了显示文件内容
# 第三步:关闭文件
file.close()

写第一个文件内容

  • 打开文件
    • file = open(r"要打开的文件路径和文件名","w")
    • 第二个参数w代表用写的方式打开文件
    • 如果用w方法打开文件,文件名不存在会创建一个新文件,存在的话会覆盖
  • 写文件
    • file.write("要写入的内容")
  • 关闭文件
    • file.close()
# 第一步:打开文件
file = open(r"E:\softwareTest\Python\file\b.txt","w",encoding='UTF-8')
# 第二步:写内容
file.write("hello world")
# 第三步:关闭文件
file.close()
# 验证程序是否执行成功,看对路径是否生成了b.txt文件

注意项:如果open第二个参数是"r",打开文件后只能用read读,不能用write写;如果是"w",只能用write写,不能用read读

追加写文件内容

  • 打开文件
    • file = open(r"文件路径和文件名","a")
    • "a"当文件不存在时创建新文件
    • 当文件存在时在文件后面追加内容
  • 写文件
    • file.write("要写入的内容")
      -关闭文件
    • file.close()
file = open(r"E:\softwareTest\Python\file\c.txt","a")
file.write("hello\n")
file.close()

总结打开文件的方式

  • open函数第二个参数的意思是打开文件的方式
    • r只读
    • w只写
    • a追加写
    • rb用二进制方法打开,只读
    • wb用二进制方法打开,只写
    • ab用二进制方法打开,追加

打开文件的时候指定字符集

  • 如果文件格式的utf8的,open打开文件的时候需要指定字符集
    • file = open("文件名","r",encoding="utf8")
    • 如果出现以下错误提示,基本就是由于字符集导致的错误
UnicodeDecodeError:

修改文件内容

file = open(r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8")
txt = file.read()
a = txt.replace("python","world")  # 将a.txt中的python换成world
file.close()  # 这一步必须关闭
# 用w方式把替换后的内容写回到a.txt里面
file = open(r"E:\softwareTest\Python\file\a.txt","w",encoding="utf8")
file.write(a)
file.close()

复制文件

# 把文件a.txt复制为b,txt
# 思路:把a.txt打开,读取全部内容
# 把b.txt用w方法打开,把内容全部写入

file = open(r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8")
txt = file.read()
file.close()
file = open(r"E:\softwareTest\Python\file\b.txt","w",encoding="utf8")
file.write(txt)
file.close()

合并文件

# 将a.txt和b.txt的文件各自读出来写到c.txt里面
file = open(r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8")
a = file.read()
file.close()
file = open(r"E:\softwareTest\Python\file\b.txt","r",encoding="utf8")
b = file.read()
file.close()
file = open(r"E:\softwareTest\Python\file\c.txt","w",encoding="utf8")
file.write(a + b)
file.close()

按行读取文件内容

  • readline()按行读取文件内容
  • 由于read一次把文件所有内容都读取到内存中,如果文件特别大,会消耗内存
  • 每调用一次readline,内部的文件指针就会想下一行移动,这样的结果是下次在调用readline会自动读取下一行
  • readline读取到文件最后,返回""
  • 如果要通过readline来读取文件所有内容
    • 写一些死循环
    • 在循环内部调用readline,读取文件每一行
    • 如果readline返回为"",终止这个死循环
file = open(r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8")
# 在循环开始的时候,不知道文件有多少行,所以不能决定循环多少次
while True:
    txt = file.readline()
    # 如果readline读取到文件末尾,返回""
    if txt == "":
        break
    print(txt, end="")

file.close()

读取文件偶数行

# 只显示文件a.txt偶数行
# 思路:只读方式打开文件,读取所有行,只显示偶数行
# 做一个循环读取所有行,在循环的时候做一个计数器,每次循环计数器+1
# 判断计数器的奇偶性

file = open(r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8")
index = 1
while True:
    txt = file.readline()
    if txt == "":
        break
    if index % 2 == 0:
        print(txt,end="")
    index += 1

file.close()

readlines

  • 一下读取文件所有行,返回一个列表,列表中的一个成员就是文件中的一行,文件有多少行,列表就有多少成员
file = open(r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8")
list1 = file.readlines()
for n in list1:
    print(n,end="")
file.close()

计算文件中最大数字与最小数字的差

# 最大值和最小值的差
# 思路:
# 把文件每一行作为list的每个成员(文件的每一行是字符串)
# 只有max(list)-min(list)
# 先做一个空的list,循环读每行,把每行int转化为整数,append到空的list里面
# 循环读完后,就可以max(list)-min(list)
file = open(r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8")
list1 = []
while True:
    txt = file.readline()
    if txt == "":
        break
    list1.append(int(txt))
file.close()
print(max(list1)-min(list1))

with open语法

  • 这个语法传统的file = open的一种简化语法, 不需要明确的调用close关闭文件
# file = open((r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8")
# txt = file.read() # print(txt) 
# file.close() # 对等代码
with open(r"E:\softwareTest\Python\file\a.txt","r",encoding="utf8") as file:
    txt = file.read()
    print(txt)
# 该语法不需要明确的调用close关闭文件

json操作

  • 一般是定义数据使用的
  • 在互联网传递数据的时候,很常见的一种文件格式
  • 所有数据用一对大括号括起来
  • 大括号内部是键值对,键和值用冒号分隔
  • 多个键值对用逗号分隔
  • 字符串用双引号
  • 数字不需要括号
  • 列表用中括号
  • 对象用大括号
{
  "name": "tom",
  "age": 20,
  "addr": [1,2,3]
}

读取json文件的方法

  • 第一步要导入json模块
    • import json
  • 第二步打开json文件
    • json中有中文,一般字符集都是utf8,打开文件的时候要指定字符集为ytf8
    • open(json文件名,“r”,encoding=“utf8”)
  • 第三步:调用json模块的load方法,读取文件内容
    • data = json.load(file)
  • 第四步:关闭open打开的文件
    • file.close()
import json
file = open("a.json","r",encoding="utf8")
data = json.load(file)     # 把json文件的内容转化为python的字典
file.close()
# print(data)
for n in data:
    print(n,data[n])

操作json文件常见错误

  • 错误1:json格式错误

json.decoder.JSONDecodeError

  • 错误2:扩展名不是json

json文件的扩展名必须是.json

  • 错误3:自己创建了一个文件名叫json.py

AttributeError: module ‘json’ has no attribute ‘load’

写json文件

  • 导入json模块
    • import json
  • 用只写方式打开json文件
    • open(json文件,“w”,encoding=“utf8”)
  • 用dump方法把字典内容写入到json文件中
    • ensure_ascii=False代表中文不转义
  • 关闭文件
    • file.close()
import json
dict1 = {"name":"刘备","age":20,"sex":"男"}
file = open("data.json","w",encoding="utf8")
json.dump(dict1,file,ensure_ascii=False)
file.close()

修改json文件内容

# 思路:先把内容从test.json中读出来
# 读出来的结果是一个字典
# 把字典中键age对应的值修改为30
# 再把字典写回到test.json文件中
import json
file = open("test.json","r",encoding="utf8")
dict1 = json.load(file)
file.close()
dict1["age"] = 30
file = open("test.json","w",encoding="utf8")
json.dump(dict1,file,ensure_ascii=False)
file.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值