文件处理和os模块

本文详细介绍了Python中文件操作的各种模式,包括`open()`函数的不同参数,如文本文件和二进制文件的区分,以及os模块提供的文件和目录操作。此外,还涵盖了yaml文件的读写、excel文件的读写(使用openpyxl库)和csv文件的处理方法。
摘要由CSDN通过智能技术生成

读取模式

r:	以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。
rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
注:r和rb的区别就在于,r是打开一些人工书写的数据,而rb是以二进制格式打开一些非人工写的数据,如图片、html文件等。

w:	打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb:	以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+:	打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a:	打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab:	以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+:	打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

txt文件操作

语法:

with open(路径,访问模式)as 变量名:

        代码块

访问模式:

        w:写入,没有文件创建文件写入内容  w会覆盖原有的内容

        r:读取,没有文件不会创建文件读取

        a:追加,没有文件创建文件追加内容

#写
with open('./test1.txt','w',encoding='utf-8')as f:
    f.write('今天星期日')

# 追加
with open('test1.txt', 'a', encoding='utf-8') as f:
    f.write('1111')

#读
with open('test1.txt', 'r', encoding='utf-8') as f:
    # print(f.read())  # 读取整个文件
    # print(f.readline())  # 读取一行
    # print(f.readlines())  # 读取所有的放在列表中
    print(f.readlines()[0])

os模块

os模块:提供了处理文件和文件目录的操作

  • 创建文件夹os.mkdir(path)
# file = r'D:\PythonTest\Study\class01\bb'  #绝对路径写法
file = './bb'                               #相对路径写法
os.mkdir(file)
  • os.listdir(path)  获取文件夹中的所有文件,以列表返回
os.listdir(r'D:\测试数据\123')
  • 删除文件夹os.rmdir(path)
os.rmdir(file)
  • 删除文件夹中的文件,包括此文件夹;shutil.rmtree(path)
import shutil
shutil.rmtree(file)
  • 文件夹重命名 os.rename(要修改的文件名,修改后的文件名)
os.rename('test1.txt','test55.txt')
  • shutil.copy(源文件,目标文件)   复制文件
src = r'D:\测试数据\123\111.txt'
      
dst = r'D:\测试数据'
shutil.copy(src, dst)
  • 判断文件
# 判断是文件夹
print(os.path.isdir(file))
# 判断是文件
print(os.path.isfile(file))
  • 获取文件的绝对路径
# 文件绝对路径       D:\PythonTest\Study\class01\demo01.py
print(os.path.abspath(__file__))
  • 获取文件的父路径(可多次嵌套)
# 当前路径的父路径    D:\PythonTest\Study\class01
print(os.path.dirname(os.path.abspath(__file__)))
  • 路径拼接 os.path.join(路径1,路径2,路径3),路径会自动加上‘\’
  • 也可以用“+”拼接路径
a = os.path.join(os.path.dirname(os.path.abspath(__file__)),'bb','config.ini')
print(a)
b = os.path.join(os.path.dirname(os.path.abspath(__file__)),'bb')
print(b + '\config.ini')

yaml文件操作

yaml安装

pip install pyyaml

yaml格式

  • 缩进表示层级关系  不能用tab按键 直接用空格
  • #表示注释
  • 字符串不需要打引号,数字想要是字符串需要自己手动打引号
  • 可以创建列表 []  - 表示列表
  • 可以创建字典{key:value}  : 表示字典
  • yaml中的数据要空格

yaml文件读取

  • dict1.yaml文件示例
  • 字典嵌套字典
#字典嵌套字典
#{'person': {'name': '小李', 'age': 18}, 'address': 'shanxi'}
person:
  name: 小李
  age: 18
address: shanxi
  • yaml文件读取:yaml.load(path,Loader=yaml.FullLoader)  ;(5.1版本以后要加上 Loader=yaml.FullLoader 参数读取更加安全) 
with open('./data/dict1.yaml','r',encoding='utf-8')as f:
    data=yaml.load(f,Loader=yaml.FullLoader) 
    print(data)

#输出
{'person': {'name': '小李', 'age': 18}, 'address': 'shanxi'}
  • 字典嵌套列表 
#字典嵌套列表
#{'name': '小李', 'age': 18, 'iphone': '123456', 'data': [123, 456]}
name: '小李'
age: 18
iphone: '123456'
data:
  - 123
  - 456
  • 列表嵌套列表
#[['二哈', '柴犬'], ['小黑', '小白'], '人类']
-
  - 二哈
  - 柴犬
-
  - 小黑
  - 小白
-
  人类
  • 列表嵌套字典
#列表嵌套字典
#[{'name': '小李', 'age': 18, 'iphone': '123456'}, '今天很开心']
-
  name: '小李'
  age: 18
  iphone: '123456'
-
  今天很开心

excel文件操作

  • 读取excel数据可以用 xlrd xlwt xlutils pandas openpyxl
  • 安装openpyxl ;  pip install openpyxl
  • 打开Excel文件 load_workbook(path):加载指定路径的excel文件
import openpyxl
workbook=openpyxl.load_workbook('./data/bb.xlsx')
  • 指定表单
sheet=workbook['Sheet3']
  • 读取数据
    • 读取所有数据
# 读取excel里面的数据
for i in sheet.values:
    print(i)
#输出
('case_id', 'url', 'data', 'expect_result', '1234')
(1, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : '1','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)
(2, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : 'b','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)
(3, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : 'a','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)
(4, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : '1','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)
  • 读取指定单元格   sheet['单元格'].value
id=sheet['A1'].value
print(id)
#输出
case_id
  •  读取指定行列单元格 sheet.cell(row,column).value
id=sheet.cell(row=1,column=1).value
print(id)
#输出
case_id
  • 写入指定数据 sheet['单元格'].value = ‘值’
sheet['E1'].value='1234'
workbook.save('./data/bb.xlsx')
  • 获取整个sheep表内容 sheet.values返回的是一个可迭代对象,需要进行列表化处理 list(sheet.values);返回的列表每一行为一个元组,可以通过切片取某几行
all_value = list(sheet.values)
print(all_value)
#输出
[('case_id', 'url', 'data', 'expect_result', '1234'), (1, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : '1','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None), (2, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : 'b','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None), (3, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : 'a','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None), (4, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : '1','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)]

csv文件操作

import csv

# csv.reader() 返回的是一个csv.reader的对象,可迭代的对象
f = open('./data/data.csv', 'r', encoding='utf-8')
with open('./data/data.csv', 'r', encoding='utf-8') as f:
    a = csv.reader(f)
    # 某一行的数据 转成list
    result = list(a)
    print(result)
    # 指定某一行
    print(result[1])

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃鱿鱼的大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值