zoukankan      html  css  js  c++  java
  • python-文件读取

    文本文件处理

      常见的文本文件有:①txt;②csv,excel;③json,yaml,xml;④ini。->str,list,dict

      序列化和反序列化。写入和读取。

      文件读取步骤:①打开文件;②写入数据;③关闭文件;④打开文件;⑤读取文件;⑥关闭文件。(外部交互需要关闭)

      相关库/模块/函数:with+open,csv,json,yaml,xlrd+xlwt+xlutils,configparser,其它:openpyxl。

      with+open+as:获取一个file对象。并不是所有文件都是要进行这个操作。如:josn.load(file_obj)  如:xlrd.open_wordbook(file_path)。

      写入操作:yaml和json直接写入dict即可。txt和csv支持w和a两种编辑模式,逐行写入。ini通常不用改。xls特殊格式,修改需要在copy的基础上进行修改,,逐行或指定cell。

    1.txt 文本

      txt是文本文件,无特殊标记,可直接读取。(数据之间的流转需要注意编码格式)

      write方法写入文件时,如果文件不存在会自动创建

      mode:a和w。w是指向文件开头,不保留原数据。a是指向结尾,保留原数据。

    import random
    import string
    
    
    # 读取全部
    def txt_read(fp=TXT_FILE):
        with open(fp, mode='r', encoding='utf-8') as f:
            return f.read(-1)
    
    
    # 逐行读取(需要去掉txt末尾的换行符)
    def txt_readline(fp=TXT_FILE):
        with open(fp, mode='r', encoding='utf-8') as f:
            for line in f.readlines():
                yield line.strip()
    
    
    # 写入全部
    def txt_write(fp=TXT_FILE):
        with open(fp, mode='w', encoding='utf-8') as f:
            s = ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(10)])
            f.write(s)
    
    
    # 逐行写入文件(需要在每行末尾加上换行符)
    def txt_writeline(fp=TXT_FILE):
        with open(fp, mode='w', encoding='utf-8') as f:
            li = [random.choice(string.ascii_letters + string.digits) + '
    ' for _ in range(10)]
            f.writelines(li)

    2.yaml,json文件

      yaml和json,key不可重复。同key不同value,可以使用数组记录。python中的tuple和list都会转化为文件中的数组类型。

      yaml和json有特殊的格式和标记符号。需要使用专门的工具进行解析。

      yaml和json对应着python里的dict。json为空时读取会抛出异常,并不会返回None。yaml为空时读取会返回None,不会抛出异常。

    json操作

      json标准编写格式。{"key":["value", true, 100, null]}

    #! coding=utf-8
    import json
    import logging
    import sys
    
    logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
    
    # 读取json->dict
    def json_read(fp=JSON_FILE):
        with open(fp, mode='r', encoding='utf-8') as f:
            data = json.load(fp=f)
            logging.debug(r'{}-->{}'.format(fp, data))
            return data
    
    # 写入dict->json
    def json_write(data, fp=JSON_FILE):
        with open(fp, mode='w', encoding='utf-8') as f:
            json.dump(data, fp=f, ensure_ascii=False)    # 关闭asscii
            logging.debug(r'{}-->{}'.format(data, fp))
    
    
    json_write(data=json_read())
    
    
    # null json 文件处理
    # 异常处理即可,读取空json意义不大。
    from json.decoder import JSONencodeError

    yaml操作

      yaml支持str,number,bool,null。以及由这四种类型组成的键值对,数组(key对应的value数组有几个成员,key的下面就有一个"-")。

      yaml的key始终是str。key与value用冒号加空格区分。

      yaml的特殊value:1,1.2,true,false,null。safe_load会处理成number,bool,None。其它的则处理成str。(使用safe_load,不要用load)

      yaml的特殊value做字符串处理:使用引号消除特殊value的特殊性,标记为str,会以str转化为dict的value。如:"true"->"true","1.3"->"1.3"

      yaml的两种编写方式:yaml风格:key: - value...,dict/json风格:{"key":[ "value", true, null, 100, "null"]}

    #! coding=utf-8
    import yaml
    
    
    # 读取yaml->dict
    def yaml_read(fp=YAML_FILE):
        with open(fp, mode='r', encoding='utf-8') as f:
            data = yaml.safe_load(f)
            logging.debug(r'{}-->{}'.format(fp, data))
            return data
    
    
    # 写入dict->yaml
    def yaml_write(data, fp=YAML_FILE):
        with open(fp, mode='w', encoding='utf-8') as f:
            yaml.dump(data, f)
            logging.debug(r'{}-->{}'.format(data, fp))
    
    
    yaml_write(yaml_read())

    3.csv,excel文件

    csv

      字段之间默认以英文逗号分隔,csv->iter(),iter对象,需要是用for或next才可获取具体的数据

      csv读取的两种形式:

        ①reader方法,从第一行开始迭代,为list。-> [v1,v2,v3]

        ②Dictreader方法,第一行为key行,从第二行开始迭代,为list。->[(k1,v11),(k2,v12).(k3,v13)]

      csv写入数据两个步骤:

        ①csv_writer = csv.writer(f)

        ②csv_writer.writerow([v1,v2,v2]) ->写入一行

    xls/xlsx

      工具:xlrd/xlwt/xlutils/openpyxl。xlrd读,xlwt写,xlutils.copy复制,openpyxl

    #! coding=utf-8
    import xlrd,xlwt,xlutils
    
    #
    def read_xls(fp=XLS_FILE):
        # 获取wb
        wb = xlrd.open_wordbook(fp)
        # 获取sheet
        cur_sheet = wb.sheet_by_name("sheet_name")
        # 获取value:
        row_values(row_no)
        column_values(column_no)
        cell_value(row_no,column_no)
        # 获取number
        cur_sheet.nrows
        cur_sheet.ncols
    
    #
    def write_xls(fp=XLS_FILE):
        # 获取wb
        wb = xlrd.open_wordbood(fp)
        # copy wordbook
        c_wb = copy(wb)
        # 获取sheet
        cur_sheet = c_wb.get_sheet(0)
        # 写一行
        cur_sheet.row(1,1,'value')
        # 更新单元格
        cur_sheet.write(1,1,'value')

    4.ini

      ini配置文件解析需要使用configparse模块

      ini组成:sections,items,options。所有的sections和options都做字符串处理。value支持:数值,布尔,字符串。

    #! coding=utf-8
    import configparser
    
    #
    def read_ini(section_name=None, option_name=None, fp=INI_FILE):
        # with open(fp, 'r', encoding='utf-8') as f:
        config = configparser.ConfigParser()
        config.read(fp, encoding='utf-8')
        # items
        if section_name and not option_name:
            return config.items(section_name)
        # options
        if section_name and option_name:
            return config.get(section_name, option_name)
  • 相关阅读:
    Update语句到底是如何操作记录的?
    sp_helptext输出错行问题解决
    SSMS查询快捷方式设置
    快速定义临时表或表变量
    T-SQL逻辑查询
    基于交换的排序算法
    插入排序及其扩展
    Python之django基础第一天,认识django
    flask虚拟环境的安装和注意事项
    Linux基础
  • 原文地址:https://www.cnblogs.com/bonus_scene/p/13636578.html
Copyright © 2011-2022 走看看