栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python小记(4) | 一些快捷的文件操作(读取文件夹中所有文件名、读取json数据保存至txt文件)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python小记(4) | 一些快捷的文件操作(读取文件夹中所有文件名、读取json数据保存至txt文件)

不说废话(其实是不会说 )直接上操作

  1. 读取文件夹中所有文件名
    参考的是网上txt转bat文件运行方式:
    在需要读取文件夹所有文件名的文件夹下,新建txt2bat.txt文件,写入dir>filename.txt
    将txt2bat.txt文件后缀转换为.bat,双击运行,即可获得一个filename.txt文件,该文件夹所有文件名,格式一般为:创建时间 文件大小 文件名称(含后缀)

  2. 读取json数据保存至txt文件
    因为我的数据可能需要保密,这里大致展示一下json文件结构:

{"Id":xxx,"Filename":xxx,"Label":[a,b,c,d]}

每个json文件非常简单,总数有几百个,我的目标是获取Filename和对应标签,存入txt文件:

# 读取json文件关键内容至txt文件中,但是缺少判断是否为json文件
import json
import os
def readjson():
    path = 'F:\xxx\json' # 文件夹位置
    files = os.listdir(path)
    label_txt = open('F:\xxx\json\label_txt.txt',mode='w')
    for file in files:
        f = open(path + '\'+file,mode='r',encoding='utf-8')
        temp = json.loads(f.read())
        for i in temp: 
            if temp["Label"]: # 判断Label是否为空值
                Labels = ' '.join(temp["Label"])
            else:
                Labels = "Null"
        str = temp["Filename"] + ';' + Labels # 写入txt文件
        label_txt.writelines(str + 'n')
        print(str) # 打印提取的数据
    label_txt.close()
    
if __name__ == '__main__':
    readjson()

我这里直接复制了打印的数据,然后将两部分数据合并贴进excel,使用数据-分列的功能,就可以很方便地拆分表格合并汇总的(给自己点个赞)!

  1. 一些报错问题记录(部分网页被我叉掉了,所以部分报错提示没存)
    ’gbk’ codec can’t decode byte 0xbb in position 117: illegal multibyte sequence
    编解码方式有问题,在open()里添加encoding = ‘utf-8’
    can only concatenate str (not “list”) to str
    一开始我直接将Filename标签和Label标签拼接,但是Label标签本身是一个列表,应该先转换为字符串再拼接Filename标签内容。
    can only join an iterable
    Label标签中存在空值,不能使用.join(),判断然后自定义输出值
    ’utf-8’ codec can’t decode byte 0xc8 in position 32: invalid continuation byte
    'utf-8’编解码器无法解码位置0的字节0xc8:无效的连续字节
    网上说是更改为gbk编码,但这样又回到了第一个问题,所以目前还没有解决,希望集思广益。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/423664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号