工作记录 01 各种文件的转换

文章介绍了不同数据类型的读写方法,包括TXT的字典列表处理,JSON的直接读写,Excel的xlrd和xlsxwriter库的应用,以及HTML文件的BeautifulSoup解析。强调了处理过程中的关键步骤和注意事项。
摘要由CSDN通过智能技术生成

TXT类型读写

JSON类型读写

Excel类型读写

HTML类型读取


TXT类型读写

        思路:我拿到的文件结构是列表里存放的是字典类型,字典有两个键值,所以我先获取每列的字符串,然后进行判断,根据结构进行存储。

    with open(file_path, 'r', encoding='utf-8') as f:
        data_list = f.readlines()
for line in f.read().split('\n'):

使用with open()可以不用自己关闭文件,也可以使用os.fdopen()设置权限降低风险;

使用readlines()可以读取txt文件,按照每一行存储成列表格式,或者直接使用读取文件也一样处理;

然后遍历data_list,用判断条件来进行存储,把读取的str变成相应的结构。

        for line in data_list:
            line = line.strip('\n')
            if line == '[':
                continue
            elif line == '{':
                continue
            elif line == '    },':
                new_data_list.append(data_dict)
                data_dict = {}
            elif 'question' in line:
                data_dict["cc"] = line.split(':')[1]
            elif 'content' in line:
                data_dict["aa"] = line.split(':')[1]

得到对应的数据结构之后,进行清洗重构等操作;

处理好的数据,通过json.dump()转换成json数据格式存入,或者就直接写入即可。

    list_num = len(new_data_list)
    json_str_new = json.dumps(new_data_list, indent=4, ensure_ascii=False)
    with open("new_data_{}.json".format(list_num), 'w', encoding='utf-8') as f:
        f.write(json_str_new)
with open('new_data_{}.txt'.format(file_name), 'w', encoding='utf-8') as f:
    for txt in new_list:
        f.write(txt + '\n')
JSON类型读写

        思路:有封装好的方法可以直接调用读取和写入,直接使用即可,注意事项跟读取txt一样。

    with open(file_path, 'r', encoding='utf-8') as f:
        data_list = json.load(f)

读取json文件,返回的是一个列表值,需要注意的是Json文件中格式是否正确,若不正确将会报错无法读取,还有无法读取的情况很可能是因为数据量太大,无法使用一次性读取的方法,那就可以使用一条条读取再转换存储。

    with open(file_path, 'r', encoding='utf-8') as f:
        data_list = []
        for line in f.readlines():
            data_line = json.loads(line)
            data_list.append(data_line)
json.dumps(new_data_list, indent=4, ensure_ascii=False)

注意使用dumps的时候参数设置,indent参数表示缩进格式,sort_keys参数表示是否按字母排序,separators参数表示去分隔符和空格等符号,ensure_ascii参数表示输出ASCLL码,如果把这个该成False,就可以输出中文。

Excel类型读写

        思路:通过xlrd里的方法读取之后,存储时可根据需求存,是一行行存储还是一列列存储,最后通过xlsxwriter来进行写入到xlsx文件格式,xlrd只能存储旧版xls文件形式。

apply_dic = []
with xlrd.open_workbook(name) as workbook:
    name_sheets = workbook.sheet_names() 

获取Excel的sheet表列表,存储是sheet表名

for index in name_sheets:
    sheet_info = workbook.sheet_by_name(index)

根据表名获取表中的所有内容,sheet_info也是列表,列表中的值是每个单元格里值

first_line = sheet_info.row_values(0)
first_row = sheet_info.col_values(0)

取首行或者首列作为键值

def merge_cell(sheet_info):
    merge = {}
    merge_cells = sheet_info.merged_cells
    for (rlow, rhigh, clow, chigh) in merge_cells:
        value_mg_cell = sheet_info.cell_value(rlow, clow)
        if rhigh - rlow == 1:
            # Merge transverse cells
            for n in range(chigh - clow - 1):
                merge[(rlow, clow + n + 1)] = value_mg_cell
        elif chigh - clow == 1:
            # Merge Vertical Cells
            for n in range(rhigh - rlow - 1):
                merge[(rlow + n + 1, clow)] = value_mg_cell
    return merge

merge_cell方法是解决对表格中有合并单元格时进行处理;

表的merged_cells是一个列表,每个元素存储着这个合并单元格的起始行,结束行,起始列,结束列位置,用cell_value()方法可以根据行列定位到单元格获取单元格值;

该方法返回值是字典,键是整个合并单元格的行和列,值是合并单元格内的值。

for i in range(1, sheet_info.nrows):
    other_line = sheet_info.row_values(i)
    for key in values_merge_cell.keys():
        if key[0] == i:
            other_line[key[1]] = values_merge_cell[key]

 nrows参数是表内所有行,values_merge_cell是merge_cell方法返回值;

第一层遍历的是除首行外的所有行,第二层遍历的是合并单元格的所有位置,如果遍历到合并的单元行,就进行填充;

获得的other_line就是除了首行外的所有单元格行,没有合并单元格。

def list_dic(list1, list2):
    dic = dict(map(lambda x, y: [x, y], list1, list2))
    return dic

list_dic方法是组合字典的函数,传入key和value,生成字典。

dic = list_dic(first_line, other_line)
apply_dic.append(dic)

将整理好的已首行为键,其他行为值的字典存入列表中,即每个列表元素都是表的一行。

def save_excel(list_1, list_2, list_3, name):
    file = xlsxwriter.Workbook(name)
    sheet_1 = file.add_worksheet()
    sheet_1.write(0, 0, "第一列")
    sheet_1.write(0, 1, "第二列")
    sheet_1.write(0, 2, "第三列")
    for n, q in enumerate(list_1):
        sheet_1.write(n + 1, 0, q)
        sheet_1.write(n + 1, 1, list_2[n])
        sheet_1.write(n + 1, 2, list_3[n])
    file.close()

 xlsx格式存储

def save_excel(list_1, list_2, list_3):
    file = xlwt.Workbook('encoding = utf-8')
    sheet_1 = file.add_sheet('sheet_1', cell_overwrite_ok=True)
    sheet_1.write(0, 0, "第一列")
    sheet_1.write(0, 1, "第二列")
    sheet_1.write(0, 2, "第三列")
    for n, q in enumerate(list_1):
        sheet_1.write(n + 1, 0, q)
        sheet_1.write(n + 1, 1, list_2[n])
        sheet_1.write(n + 1, 2, list_3[n])
    file.save('new_excel.xls')

xls格式存储 

HTML类型读取

        思路:读取本地的html文件,然后根据标签一层层筛选,本意是想通过正则匹配,但是按上级说的做

resp_html = open(file_path, encoding="utf-8")
soup = BeautifulSoup(resp_html, "html.parser")

注意open之后要close;

得到soup对象后就可以使用常用方法,soup.title获取标题,soup.find()和soup.find_all()可以根据标签,属性,内容查找tag,然后soup.get_text()可以获取tag内的字符串。

注意判断标签和标签换行,视频和图片还有表格类的tag,class属性是不一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值