Python文件处理

读取json文件

        with open(r'C:\Users\Administrator\Desktop\test_openapi.json', encoding='utf-8') as f:
            data = json.load(f)
        return data

返回的data类型为dict

写入json文件

with open('Urls.json','w',encoding="utf-8") as f:
    json.dump(data,f)

读取yaml文件

import yaml

f = open(r"F:\接口自动化\api-autotest\util\template.yml", "r",encoding='utf-8')
data = yaml.load(f)
f.close()

print(data)
print(type(data))

返回的data类型为dict 

写入yaml文件

def write_yaml_file(data,file):
     f=open(filepath+'.yml',"w",encoding='utf-8')
     yaml.dump(data,f,allow_unicode=True)
     f.close()

读取txt文件 

with open('text.txt',encoding='utf-8') as f:
    content=f.readlines()
    print(content)

f.readline()以列表返回内容。

text文件

 结果

D:\软件\python.exe D:/flask_project/Blog_web/1.py
['这里有一个参数“encoding”。这个参数特别有用,\n', '它可以在打开文件的时候将文件转换为UTF-8编码格式,从而避免乱码的出现。\n', '这个参数只有Python 3有,在Python 2中使用这个参数会报错。\n', '如果文件是在Windows中创建的,并且使用UTF-8打开文件出现了乱码,可以把编码格式改为GBK。']

Process finished with exit code 0

f.read()直接把文件里面的全部内容用一个字符串返回

import json
with open(r'D:\工作\企业微信\WXWork\1688851028142000\Cache\File\2023-07\text.txt', 'r') as f:
    content = f.read()
    content=json.loads(content)
    print(content)
    print(type(content))

 读取txt文件内的列表嵌套字典数据,返回的content类型为list

读取Excel文件

openpyxl

import openpyxl

workbook = openpyxl.load_workbook(r'D:\工作\企业微信\WXWork\1688851028142000\Cache\File\2023-07\test.xlsx')

worksheet = workbook.get_sheet_by_name('Sheet2')

row3=[item.value for item in list(worksheet.columns)[0]]
# print(row3)
返回一列的数据

openpyxl

   from openpyxl import load_workbook, Workbook

if __name__ == "__main__":

    # 创建一个workbook

    file_name = r'c:\test.xlsx'

    wb = Workbook()

    # 创建一个sheet,名为iTesting,把它插入到最前的位置

    wb.create_sheet('iTesting',0)

    # 创建一个sheet,名为VIPTEST,把它插入index为1的位置

    wb.create_sheet('VIPTEST',1)

    # 保存表格

    wb.save(file_name)

    # 读和写

    # 初始化表格

    wb2 = load_workbook(file_name)

    # 读,获取所有的sheet名称

    print(wb2.sheetnames)



    # 获取sheet名为iTesting的表格

    s = wb2['iTesting']

    # 将A1行的值设置为iTesting

    s['A1'] = 'iTesting'

    # 将第2行,第一列的值设置为1

    s.cell(row=2, column=1).value = 1

    # 打印第2行第一列单元格的值 --方法1

    print(s.cell(row=2,column=1).value)

    # 打印第2行第一列单元格的值 --方法2

    print(s['A2'].value)

    # 保存表格

    wb.save(file_name)

将Excel数据读取为列表嵌套元组

workbook = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\test.xlsx')
cases_list = []
worksheet = workbook.get_sheet_by_name('Sheet1')
cells=worksheet[worksheet.dimensions]
datas = list(worksheet.iter_rows(values_only=True))  # 获取Excel表中的所有数据,每一行组成元组,整个数据组成列表
print(datas)
case_datas = datas[1:]  # 获取表数据
for case in case_datas:
    cases_list.append(case)
print(cases_list)

pandas

Pandas 是一个强大的分析结构化数据的工具集,它的使用基础是 Numpy(提供高性能的矩阵运算);Pandas 用于数据挖掘和数据分析,同时也提供数据清洗功能。使用 Pandas 操作 Excel 数据,就好像数数那样简单。

Pandas安装

  1. # pandas默认依赖xlrd库,故先安装xlrd

  2. pip install xlrd

  3. # 安装Pandas

  4. pip install Pandas

Pandas 语法

import Pandas as pd

# 首先初始化,engine默认是xlrd

s = pd.ExcelFile(path_or_buffer, engine=None)


# 接着parse

s.parse(sheet_name=0,header=0,names=None,index_col=None,usecols=None,

squeeze=False,converters=None,true_values=None,false_values=None,

skiprows=None,nrows=None,na_values=None,parse_dates=False,

date_parser=None,thousands=None,comment=None,skipfooter=0,

convert_float=True,mangle_dupe_cols=True,**kwds,)

Pandas 读取 Excel 文件非常简单,首先使用 Pandas 初始化 ExcelFile。其两个参数path_or_buffer 是我们要读取的文件路径。

Excel 文件名称建议使用英文路径及英文命名方式,尽量不要使用中文。

import pandas as pd

path_or_buffer = r'D:\_Automation\lagouAPITest\tests_pytest_ddt\test_baidu_ddt.xlsx'

engine 是供 Pandas 使用的 engine,可选项为“xlrd”“openpyxl”“odf”和“pyxlsb”,如果不提供,默认使用 xlrd。

parse 函数的参数

初始化后,可以使用 s.parse() 函数。parse 函数有非常多的参数,在此我列出常用的几个。

  • sheet_name: Excel 的 sheet 名

sheet_name 可以是整型数字、列表名,或者上述两者组合。

# 通过整型数字读取。读取第一个sheet。 Pandas sheet名下标以0开始

s = pd.ExcelFile(path_or_buffer, sheet_name = 0)

# 通过列表名读取

data = s.parse(sheet_name = 'iTesting')

# 通过index读取。读取第一个sheet

data = s.parse(sheet_name = 0)

#组合读取。读取第4个sheet,名为iTesting的sheet以及第7个sheet

data = s.parse(sheet_name = [3, 'iTesting', 'Sheet6'])

  • header:使用哪一行作为列名

header 默认值为 0,即第一行,也可以设置为 [0, x]。

(例如 [0,1] 意味着将前两行作为多重索引)

data = s.parse(sheet_name = 'iTesting', header = 0)

需要注意: Pandas 默认使用第一行为 header,所以在 Excel 里,第一行必须是 title,如果第一行是数据,将会导致第一行数据被遗漏。如果不想要 header,可以参数传递 header=None。

  • usecols:待读取的列

usecols 接收整型,从 0 开始,例如 [0, 1, 2],也可以使用列名例如 “A:D, F”,表示读取 A 到 D 列,以及 F 列。

data = s.parse(sheet_name = 'iTesting', usecols='A:D') 
  • skiprows:读取时,跳过特定行

skiprows=n,跳过前 n 行;skiprows = [a, b, c],跳过第 a+1、b+1、c+1 行(索引从0开始)

data = s.parse(sheet_name = 'iTesting', skiprows = [1,2,3]) 
  • nrows:需要读取的行数

仅仅列出要读取的行数

data = s.parse(sheet_name = 'iTesting', nrows = 3)

使用 Pandas 读取 Excel 数据:

def read_data_from_pandas(excel_file, sheet_name):

if not os.path.exists(excel_file):

raise ValueError("File not exists")

# 初始化

s = pd.ExcelFile(excel_file)

# 解析Excel Sheet

df = s.parse(sheet_name)

# 以list格式返回数据

return df.values.tolist()

可以看到,使用 pandas 读取 Excel 数据更加简洁方便。

 

 写入txt文件

直接将一大段字符串写入到文本中f.write()

with open('text.txt','w',encoding='utf-8') as f:
    f.write('你好啊')

会清空text.txt,并写入。

f.writelines(['1','2','3']) 

把列表里面的所有字符串写入到文本中。

python写到文本中的文字是不会自动换行的,需要人工输入换行符才可以

with open('text.txt','w',encoding='utf-8') as f:
    f.writelines("早上好")
    f.writelines('\n中午好\n')
    f.write('晚上好')

读CSV文件

csv本质上是一个文本文件

csv文件

import csv
with open('hello.csv',encoding='utf-8') as f:
    reader=csv.DictReader(f)
    for row in reader:
        print(row)

 结果,得到一个字典。

 写入CSV文件

Python可以把一个字典写成CSV文件,或者把一个包含字典的列表写成CSV文件。Python写CSV文件比读CSV文件稍微复杂一点,因为要指定列名。列名要和字典的Key一一对应。

import csv
data=[{'name':'kingname','age':24,'salary':9999},
{'name':'meiji','age':20,'salary':100},
{'name':'xiaoming','age':30,'salary':2300}
      ]
with open('new.csv','w',encoding='utf-8')as f:
    write=csv.DictWriter(f,fieldnames=['name','age','salary'])#写入CSV文件的列名行:
    write.writeheader()
    write.writerows(data)#将包含字典的列表全部写入到CSV文件中
    write.writerow({'name':'张三','age':30,'salary':2300})#写入单个字典

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值