9.Python必学的文件处理知识

1、读写文件

1.1、打开文件

open函数打开文件,返回文件对象。open 函数打开文件三种常用模式:

  • 只读模式,使用r表示,用于读取文件内容,不能向文件中写入数据
  • 只写模式,使用w表示,用于将数据覆盖写入文件中
  • 追加模式,使用a表示,用于将数据追加写入文件的末尾

注:打开一个不存在的文件时,只读模式会报不存在文件异常,只写和追加模式都会创建一个写文件

# 打开不存在的文件
f = open('test.txt','r') # 报错:FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
f = open('test.txt','w') #创建文件
f = open('test.txt','a') #创建文件

1.2、写文件

  • write()方法

写入文件的内容不会自动换行,且调用一次只能将一个字符串写入文件

# 写入数据到文件
# 第一次
f = open('test.txt','w')
f.write('hello')
f.write('world')
f.write('!')

# 第二次(覆盖第一次写入数据)
f = open('test.txt','w')
f.write('你')
f.write('好')

# 使用追加
f = open('test.txt','a')
f.write('你')
f.write('好')

# 写入换行,使用换行符
f = open('test.txt','w')
f.write('hello\n')
f.write('world\n')
f.write('!\n')
  • writelines()方法

可以将一个序列中的多个字符串一次写入文件中

# 使用writelines()函数,调一次写入
f = open('test.txt','w')
f.writelines(['hello\n','world\n','!\n'])
  • close()方法

当使用完一些资源,要对其资源释放或者关闭,避免资源浪费

# 使用close()函数关闭文件
f =open('test.txt','w',encoding='utf-8')
f.writelines(['hello\n','world\n','!\n'])
f.close()

1.3、文件安全打开

使用with关键字和open函数打开文件,当文件操作完后会自动调close()方法

# 使用with关键字安全打开文件
with open('test.txt','w',encoding='utf-8') as f:
  f.writelines(['hello\n','world\n','!\n'])

1.4、读文件

  • read()方法

可以一次性从文件中读取所有文件内容

# read()函数读文件
with open('test.txt','r',encoding='utf-8') as f:
  data = f.read()
  print(data)
  • readlines()方法

可以按照行的方式把文件中的内容一次全部读取出来,返回一个列表

# readlines()函数读文件
with open('test.txt','r',encoding='utf-8') as f:
  datas = f.readlines()
  print(datas)
  for data in datas:
      print(data,end='') # end='' 取消print函数换行打印

2、文件管理

文件操作时,不只是有读取和写入操作,还有删除文件、文件重命名、创建文件夹等

  • rename函数

用于对文件或者文件夹重命名,文件不存在时会报文件不存在异常

# 文件重命名
import os
os.rename('test.txt','测试.txt')
  • remove函数

用于删除指定文件

# 删除指定文件
import os
os.remove('测试.txt')
  • mkdir函数

用于在指定路径下创建文件夹

# 创建文件夹
import os
os.mkdir('test') #当前文件夹下
  • getcwd函数

用于获取程序运行的绝对路径

# 获取程序运行绝对路径
import os
print(os.getcwd())
  • listdir函数

用于获取指定路径下的文件列表,返回一个列表

# 获取指定路径下的文件列表
import os
print(os.listdir('./'))
  • rmdir函数

用于删除指定路径下的空文件夹

# 删除指定路径文件夹,(非空文件夹删除会报错)
import os
os.rmdir('test')

3、JSON文件操作

JSON中的数据类型与Python中的数据类型会有一些差异:

1.python中的元组和列表在JSON中都是以列表形式存在;

2.python中的布尔类型True和False在JSON中会转为写true和false;

3.python中的空类型None在JSON中会转为null。

json模块常用几个函数:

  • dumps函数

将Python数据类型转为JSON字符串

# dumps函数
import json
user_info={'name':'zhangsan','age':18,'sex':None,'study':['java','python'],'vip':False}
json_str = json.dumps(user_info)
print(json_str)
  • loads函数

将JSON字符串转为Python的数据类型

# loads函数
import json
json_str = '{"name": "zhangsan", "age": 18, "sex": null, "study": ["java", "python"], "vip": false}'
json_obj=json.loads(json_str)
print(json_obj)
  • dump函数

将Python数据类型转为JSON字符串,并写入JSON文件

# dump函数
import json
json_str = '{"name": "zhangsan", "age": 18, "sex": null, "study": ["java", "python"], "vip": false}'
json_obj=json.loads(json_str)
with open('test.json','w') as f:
  json.dump(json_obj,f)
  • load函数

从JSON文件读取数据,并将JSON字符串转为Python数据类型

# load函数
import json
with open('test.json','r') as f:
  json_obj = json.load(f)
  print(json_obj)

4、CSV文件操作

CSV文件内容默认使用逗号分隔,可以使用Excel打开;

CSV文件是一种文本文件,可以使用其他文本编辑器打开;

CSV文件内的数据没有类型,所有数据都是字符串

csv模块常用几个函数:

4.1、写入csv文件

  • writerow函数

一次写入一行数据

# writerow写入csv文件
import csv
data = [['name', 'age'], ['张三', 18], ['李四', 20], ['王五', 25]]
with open('test.csv', 'w', encoding='utf-8') as f:
  writer = csv.writer(f)
  for row in data:
      writer.writerow(row)
  • writerows函数

一次写入多行数据

# writerows写入csv文件
import csv
data = [['name', 'age'], ['张三', 18], ['李四', 20], ['王五', 25]]
with open('./test.csv','w',encoding='utf-8') as f:
  writer = csv.writer(f)
  writer.writerows(data)

4.2、读csv文件

  • reader方法

根据打开的文件对象返回一个可迭代对象,然后遍历对象读取CSV文件每一行数据

# 读取csv文件内容
import csv
with open('test.csv','r',encoding='utf-8') as f:
  w = csv.reader(f)
  for row in w:
      print(row)