精华内容
下载资源
问答
  • 2021-08-29 23:25:22

    1 读txt文件

    下面代码实现的是:将一个txt文件内每行内容都存放到列表contents中。
    有一点强调,为什么要在路径前加'r'
    其实r的作用和\\的作用一样,都是为了防止程序将\当作是转义字符,所以r\\在写的时候使用一种方法就可以,当然如果路径是/,那么就不需要涉及这些了。

    import operator
    contents = []   # 存放txt文件每行的内容
    filename = r"C:\Users\Lenovo\Desktop\大三上\nlp实验室\python处理\21.8.29 test.txt"
    with open(filename, 'r') as f:
        for line in f.readlines():
            contents.append(line)
    f.close()
    

    2 批量读文件

    批量读文件的核心就是学会拼凑文件名,只要掌握了这个批量读取就不是问题。
    现在我的文件夹结构如下图(我要读这个大文件夹下面的所有小文件夹里的所有txt文件):
    在这里插入图片描述
    我的实现代码如下:(结合1)
    注意有一个细节:encoding最开始我选用'utf-8'时不知道为什么不行,后来改成了下面的'ISO-8859-1'

    import os
    import operator
    
    contents = []   # 存放txt文件每行的内容
    path1 = r"C:\Users\Lenovo\Desktop\acl2021"
    files_1 = os.listdir(path1)   # 得到path1文件夹下所有文件的名称
    for file in files_1:
        path2 = path1 + "\\" + file
        files_2 = os.listdir(path2)	# 得到path2文件夹下所有文件的名称
        for file2 in files_2:
            pos = path2 + "\\" + file2  # filename
            with open(pos, 'r', encoding='ISO-8859-1') as f:     # encoding='utf-8'不行
                for line in f.readlines():
                    contents.append(line)
            f.close()
    

    这样,我大文件夹里767个txt文件的所有内容就存到了contents列表中,接下来就可以具体处理了。

    3 个人记录

    2021.9.29 抽取动词总代码

    import os
    import operator
    import xlwt
    from nltk import word_tokenize
    from nltk import pos_tag
    from nltk.stem import WordNetLemmatizer
    
    # 读txt
    contents = []   # 存放txt文件每行的内容
    path1 = r"C:\Users\Lenovo\Desktop\acl2021"
    files_1 = os.listdir(path1)   # 得到path1文件夹下所有文件的名称
    for file in files_1:
        path2 = path1 + "\\" + file
        files_2 = os.listdir(path2)
        for file2 in files_2:
            pos = path2 + "\\" + file2  # filename
            with open(pos, 'r', encoding='ISO-8859-1') as f:     # encoding='utf-8'不行
                for line in f.readlines():
                    contents.append(line)
            f.close()
    
    # 动词统计
    dic = {}
    wnl = WordNetLemmatizer()
    for line in contents:           # 每一行
        line = line.lower()         # 先小写处理
        tokens = word_tokenize(line)    # 标记解析
        tags = pos_tag(tokens)          # 词性标注
        v_tags = {'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ'}      # 动词集
        for word, pos in tags:
            if pos in v_tags:
                word = wnl.lemmatize(word, 'v')     # 词性还原
                if word not in dic:
                    dic[word] = 1
                else:
                    dic[word] = dic[word] + 1
    
    res = sorted(dic.items(), key=operator.itemgetter(1), reverse=True)     # 排序的结果是list类型
    # for item in res:
    #     if item[1] > 3:
    #         print(item)
    
    # 写入excel
    wb = xlwt.Workbook()
    sh = wb.add_sheet('test')
    idx = 0
    for item in res:
        if item[1] > 3:
            sh.write(idx, 0, item[0])
            sh.write(idx, 1, item[1])
            idx = idx + 1
        else:
            break
    
    wb.save(r"C:\Users\Lenovo\Desktop\动词筛选2.xls")
    print("写入完成")
    

    4 参考

    [1] python操作txt文件中数据教程[1]-使用python读写txt文件
    [2] python 批量读取文件夹中的多个TXT文件

    更多相关内容
  • 通过python对多个txt文件进行处理 读取路径,读取文件 获取文件名,路径名 对响应的文件夹名字进行排序 对txt文件内部的数据相应的某一列/某一行进行均值处理 写入到事先准备好的Excel文件中 关闭Excel文件 #...
  • python批量处理txt文件

    千次阅读 2020-01-10 11:31:02
    背景,用了5个板卡测试了11个电容,每个板卡都有28个通道,得到测量值和真是电容值进行线性拟合,观察这5个板卡的一致性如何,首先是同事进行测量,得到的数据保存在TXT文件中,因此整个文件及文件夹的结构如下图所...

    背景,用了5个板卡测试了11个电容,每个板卡都有28个通道,得到测量值和真是电容值进行线性拟合,观察这5个板卡的一致性如何,首先是同事进行测量,得到的数据保存在TXT文件中,因此整个文件及文件夹的结构如下图所示,首先是板卡的序列号命名的文件夹,下面有11个电容值命名的文件夹,再往下是CH1-CH2....CH7-CH8等28个通道组合的文件夹,每个文件家下面有一个txt文件,内部保存了1分钟左右的数据,共有29列,若干行,第一列是时间,后面28列对应28个通道的数据,中间用空格隔开

    通过python对多个txt文件进行处理

    1. 读取路径,读取文件
    2. 获取文件名,路径名
    3. 对响应的文件夹名字进行排序
    4. 对txt文件内部的数据相应的某一列/某一行进行均值处理
    5. 写入到事先准备好的Excel文件中
    6. 关闭Excel文件

    #import numpy as np
    import pandas as pd
    import os
    
    
    
    folder = 'D:/log/A190820C31N82'
    
    def all_files_in_a_folder_iter(folder):
        import os
        for root, dirs, files in os.walk(folder):
            for file in files:
                # 获取文件路径
                yield (os.path.join(root, file))
    
    #对CH1-CH2到CH7-CH8的文件夹进行排序
    l = os.listdir('D:/log/A190820C31N82/08  583fF    2.3.10.0  30fps')
    dic ={}
    n=1
    for i in l:
        if 'CH' in i:
            dic[i] = n
            n=n+1
    
    #对电容大小排序
    dd = os.listdir('D:/log/A190820C31N82')
    dsc = {}
    m=1
    for j in dd:
        if 'fF' in j:
            dsc[j] = m
            m=m+1
    
    #import xlrd
    #import xlwt
    
    from openpyxl import load_workbook
    #import openpyxl
    #打开Excel文件
    wb = load_workbook('D:/log/data_process.xlsx')#生成一个已存在的wookbook对象
    wb1 = wb.active#激活sheet
    for i in all_files_in_a_folder_iter(folder):
        if '.txt' in i and 'ECT' in i:
    #        print(i)
            a = pd.read_table(i,header=None)
            s = i.split('\\')[2]
            t = i.split('\\')[1]
            n = dic[s]
            m = dsc[t]
            res = a.values[:,n].mean() #做均值处理,保存结果
            
            wb1.cell(t*5+1,n+2,res)#往sheet中的第t*5+1行第n+2列写入均值
    wb.save('D:/log/data_process.xlsx')#保存
    wb.close()

    文件结构如下图所示

    展开全文
  • 在同一个文件夹下有多个Txt文档 <p>2.需要将各个Txt文档中的"PR/"括号内其他内容"TE6WZZM5PA"和“TT/”括号内其他内容" H M59S"汇总到一个Excel表里 求助   <p><img alt="" height=...
  • python 批量处理txt文件内容 使用python 完成txt文档内容转换 转换前 文件夹中有批量的txt文档 内容为 第一行 为总坐标数量 第二、三、四、五行 为坐标信息 目标 转换后 去除第一行总坐标数量、 只保留坐标信息、且...
  • python批量处理txt文本,获取指定内容

    千次阅读 多人点赞 2021-05-30 15:44:17
    那就是批量处理txt文本啦,获取里面指定内容,然后进行保存。刚开始拿到,发现无从下手。整理了思路后发现还是可以做的,嘿嘿! 首先文本里的内容是这样的: 要取的内容就是最后的那些数字。还好每个文档的格式都是...

    分享分享分享

    那就是批量处理txt文本啦,获取里面指定内容,然后进行保存。刚开始拿到,发现无从下手。整理了思路后发现还是可以做的,嘿嘿!

    首先文本里的内容是这样的:

    在这里插入图片描述
    要取的内容就是最后的那些数字。还好每个文档的格式都是规范的,其实不规范也是差不多的。因为我用的是正则来匹配,如下图:
    在这里插入图片描述
    然后就是开始写代码啦!这里就直接上代码了!因为注释全在代码上啦!

    import os
    import re
    
    path = "D:\\大一下学期\\课程\\new\\"  # 找到txt所在位置
    files = os.listdir(path)  # 得到文件夹下所有txt
    i = 0  # 定义变量
    for file in files:  # 让txt循环起来
        i += 1  # 用于后续查看完成进度
        position = path + '\\' + file  # 构造绝对路径
        # print(position)
        f1 = open(position, "r", encoding='utf-8')  # 打开并读取文件信息
        data = f1.read()  # 读取信息
        # print(data)
        parrern = "[123456789].*\-[0-9].[0-9]{1}.*.[0-9]{3}.*.[0-9]{3}"  # 用正则匹配所需要的信息
        str2 = re.findall(parrern, data)  # 查找所有符合条件的信息
        # print(str2)
        f2 = open("提取的信息.text", "a+", encoding="utf-8")  # 打开并写入信息
        # print(";".join(str2).replace(";", "\n"))
        f2.write(";".join(str2).replace(";", "\n") + "\n")  # 先转为非数组类型,再用分行输出
        print("完成" + str(i))
        f2.close()  # 有开就有关
        f1.close()  # 有开就有关
    

    文中有解释不到位的地方,欢迎各位大佬们的指正哦。

    之后还会继续分享自己学习路程,让自己不断成长!

    冲呀冲呀冲呀!

    展开全文
  • Python对folder、txt、excel进行操作的方法总结一、使用Python批量创建folder二、使用python批量创建txt三、使用 Python批量修改文件名四、使用Python读取txt中的数据并创建excel五、拆分txt数据:一个txt分组成多个...


    一、使用Python批量创建folder

    1. 主要用到的库就是os;
    2. 代码运行的结果是:在指定文件夹下创建一组文件夹。

    part1:代码:

    import os			#导入os模块
                                           
    for i in range(1,11):               #使用for循环创建从1到x的文件夹,此处是创建10个文件夹,从 1-10                                        
        path1 = 'D:/Codedata/test/creat_folder/'	#设置创建后文件夹存放的位置,此处是在creat_folder文件夹下创建一组文件夹
        path2 = '测试_' + str(i)                #此处可以修改/删除:'测试_'
        path = os.path.join(path1, path2)       #路径拼接
        isExist = os.path.exists(path)  #定义一个变量判断文件是否存在
        if not isExist:		              #如果文件不存在,则创建文件夹,并提示创建成功
            os.makedirs(path)	
            print("%s 目录创建成功"%i)
        else:                           #如果文件存在,则提示已经存在
            print("%s 目录已经存在"%i)	        
            continue			          #继续上述操作,直到循环结束
    

    part2:运行结果图:

    请添加图片描述

    请添加图片描述

    删掉第5行的 ‘测试_’ 后,path2 = str(i) ,意为只创建纯数字命名的文件夹,运行结果如下:

    请添加图片描述


    二、使用python批量创建txt

    1. 主要用到的库是os;
    2. 代码运行的结果是:在指定文件夹下创建一组txt。

    part1:代码:

    import os    #导入os模块
    
    for i in range(1,6):   #使用for循环创建5个txt,从1到5
        path1 = 'D:/Codedata/test/creat_folder/1/' #设置创建后文件夹存放的位置,此处是在creat_folder文件夹下的1文件夹下创建一组txt
        path2 = '测试_' + str(i)                   #此处可以修改/删除:'测试_'
        path = os.path.join(path1,path2)           #路径拼接
        f = open( path + '.txt',"a")   #a表示没有该文件就新建
        f.write("")		#写入文件,空
        f.close()		#执行完结束
    

    part2:运行结果图:

    请添加图片描述

    删掉第5行的 ‘测试_’ 后,path2 = str(i) ,意为只创建纯数字命名的txt,运行结果如下:

    请添加图片描述


    三、使用 Python批量修改文件名

    1. 主要用到的库os;
    2. 代码的作用是:可以修改指定文件夹下的文件,不限格式(包括:folder、txt等)。

    part1:代码:

    import os   #导入os模块
    
    path = 'D:/Codedata/test/creat_folder/' #需要修改的文件所在的路径
                                            #此处是修改在creat_folder文件夹下的一组文件夹的名字
    original_name = os.listdir(path)        #读取文件初始的名字
    print(original_name) 
    
    for i in original_name:                 #遍历全部文件
        os.rename(os.path.join(path,i),os.path.join(path,'测试_'+i))  #修改文件名
    

    part2:运行结果图:

    请添加图片描述

    请添加图片描述


    四、使用Python读取txt中的数据并创建excel

    1. 首先,在第二节创建的txt的基础上,给每个txt写入一列9个数据,如下图所示:

    请添加图片描述

    1. 接下来,先实现用Python读取一个txt的数据,并存入excel中,下面的代码针对“测试_1.txt”。

    part1:代码:

    ## 本例中要读取的txt存放的路径为: D:\Codedata\test\creat_folder\1\  
    ## 名字为: 测试_x.txt
    
    import xlwt  #导入excel文件的库
    
    # 打开txt文件并读取数据
    with open(r'D:/Codedata/test/creat_folder/1/测试_1.txt','r+') as title:  #'r+'表示对文件是进行"读取和写入的模式"
       layertitle = title.read()
       layertitle_list= layertitle.split()                       #读取txt文件内容默认是str类型,此处将其分割成一个个元素形成列表
    
    # 创建excel用于存放数据
    workexcel = xlwt.Workbook(encoding='ascii')                    #创建一个工作表对象
    sheet = workexcel.add_sheet('layer1',cell_overwrite_ok=True)   #创建表格,添加一个名为layer1的sheet     
    i=0  #行变量,初始值为第一行
    j=0  #列变量,初始值为第一列
    for data in  layertitle_list:     #遍历数据,写入excel文件
        sheet.write(i,j,data)         #i,j控制表格坐标,左顶点为(0,0)
        i=i+1                         #控制j=0不变,i每次+1下移一格,表示将数据写成一列
    workexcel.save('测试.xls')        #保存文件,这里默认保存到相对路径,即当前工作区的路径
    

    part2:运行结果图:

    1. 继续实现读取同一文件夹下的多个txt的数据,并存入一个表格的同一个sheet中
      思路:将上一步的代码封装成一个函数,只传入一个 txt_id 用于读取指定的.txt文件。

    part1:代码:

    #本例中要读取的txt存放的路径为:  D:\Codedata\test\creat_folder\1\  名字为: 测试_x.txt
    import xlwt
    import os             
    
    def read_txt(txt_id):
        path1 = 'D:'
        path2 = '\\Codedata'
        path3 = 'test'
        path4 = 'creat_folder'
        path5 = '1'
        txt_id = '测试_' + str(txt_id) + '.txt'
        path6 =  txt_id
        position = os.path.join(path1,path2,path3,path4,path5,path6) 
        print(position)
        with open(position,'r+') as title:   # 打开txt文件并读取数据
            layertitle = title.read()
            layertitle_list = layertitle.split() 
            return layertitle_list
    
    if __name__ == '__main__':
        workexcel = xlwt.Workbook(encoding='ascii')                   #创建一个工作表对象
        sheet = workexcel.add_sheet('layer1',cell_overwrite_ok=True)  #创建表格,添加一个名为layer1的sheet 
        for num in range(1,6):  #利用for循环遍历txt文件
                i=0             ##行变量,初始值为第一行
                data = read_txt(num) 
                #print(data)
                for d in data:
                    sheet.write(i,num,d)    #i,j控制表格坐标,左定格为(0,1)下一次(0,2)以此类推
                    i=i+1                   #按列写入数据
                workexcel.save('测试2.xls') #保存文件,这里默认保存到相对路径  
    

    part2:运行结果图:

    请添加图片描述

    1. 如果想实现读取不同文件夹下的txt数据,并存入同一表格的不同sheet怎么办?
      思路:在上一步的read_txt函数中再引入一个folder_id,作为每个sheet的名字同时又能用于for循环中遍历所有文件夹。

    part1:代码:

    #本例中要读取的txt存放的路径为:  D:\Codedata\test\creat_folder\x\  名字为: 测试_x.txt
    import xlwt
    import os             
    
    def read_txt(txt_id,folder_id):
        path1 = 'D:'
        path2 = '\\Codedata'
        path3 = 'test'
        path4 = 'creat_folder'
        path5 = str(folder_id)
        txt_id = '测试_' + str(txt_id) + '.txt'
        path6 =  txt_id
        position = os.path.join(path1,path2,path3,path4,path5,path6) 
        print(position)
        with open(position,'r+') as title:   # 打开txt文件并读取数据
            layertitle = title.read()
            layertitle_list = layertitle.split() 
            return layertitle_list
    
    if __name__ == '__main__':
        workexcel = xlwt.Workbook(encoding='ascii')                       #创建一个工作表对象
        for num1 in range(1,11):            #利用for循环遍历文件夹
            sheet = workexcel.add_sheet(str(num1),cell_overwrite_ok=True) #创建10个sheet       
            for num2 in range(1,6):        #利用for循环遍历txt文件
                i=0                        ##行变量,初始值为第一行
                data = read_txt(num2,num1) 
                #print(data)
                for d in data:
                    sheet.write(i,num2,d)  #i,j控制表格坐标,左定格为(0,1)下一次(0,2)以此类推
                    i=i+1                  #按列写入数据
                workexcel.save('测试3.xls')   #保存文件,这里默认保存到相对路径  
    

    part2:运行结果图:

    请添加图片描述

    ......

    五、使用Python批量删除文件的第一行

    • 面临的问题:自己创建的标签文件,打开之后发现第一行有version的信息,所以想把所有的标签的第一行都删掉~
      1. 主要用到的库就是os;
      2. 代码运行的结果是:对指定文件夹下的所有文件的第一行都进行删除的操作。

    part1:代码:

    import os
    
    for f in os.listdir('.'):
           if '.xml' in f:     #此处的.xml可以修改为.txt等文件格式
                   lines = open(f,encoding='utf-8').readlines()
                   open(f, 'w',encoding='utf-8').writelines(lines[1:])
    

    part2:运行结果图:


    六、使用Python批量修改xml文件的内容

    • 面临问题:在处理一个数据集的标签时,我发现读取的分类标签name是同时含有大小写的,所以想把所有的分类都替换为小写的~
    • 运行下面的代码时,需要注意的是区分:当前工作路径xml文件存储的路径

    part1:代码:

    #第一步:导入库
    import os  
    import os.path
    from xml.etree.ElementTree import parse, Element
    
    #第二步:定义一个函数,功能:批量修改xml中内容
    def test():
        path = "E:\\annotation"   #xml文件所在的目录,举例 E:\annotation
        files = os.listdir(path)  # 获得文件夹下所有文件名
        s = []
        for xmlFile in files:     # 遍历文件夹
            if not os.path.isdir(xmlFile):  # 判断是否是文件夹,不是文件夹才打开
                print
                xmlFile
                pass
            path = "E:\\annotation"
            print(xmlFile)        #输出文件名,方便知道在处理哪个xml文件
            path1 = xmlFile       #定位当前处理的文件的工作路径
            newStr = os.path.join(path, xmlFile)
            class1 = "bus"       #这是你想最终显示的内容
            class2 = "truck"     #此处我想换成把原来的全部换成小写
            class3 = "suv"       #这里举了3个例子
            dom = parse(newStr)    #路径拼接,输入的是具体路径
            root = dom.getroot()
            #print(root)
            for obj in root.iter('object'):      #获取object节点中的name子节点
               if obj.find('name').text == 'Bus':  #判断获取的name节点下的内容是否为Bus
                   print('1')                      # 输出1
                   obj.find('name').text=class1  
                   name1 = obj.find('name').text   #修改
                   print(name1)
               elif obj.find('name').text == 'Truck': 
                   print('2')
                   obj.find('name').text=class2
                   name2 = obj.find('name').text   #修改
                   print(name2)
               elif obj.find('name').text == 'SUV':
                   print('3')
                   obj.find('name').text=class3
                   name3 = obj.find('name').text   #修改
                   print(name3)
               dom.write(path1, xml_declaration=True) #将修改后的xml保存到当前工作的路径下
               pass
    if __name__ == '__main__':
        test()
    
    
    

    part2:运行结果图:


    七、拆分txt数据:一个txt分组成多个txt(选读Matlab)

    【注】拆分一个包含很多数据的txt文件,使用的工具是matlab。

    1. 基础版:将一个包含73728(576*128)个数据的按列存放的txt文件,拆分成128组,每组的576个数据存于一个txt中。也就是说,代码运行之后,在指定文件夹下应该有128个txt,每个txt中有576个数据是按列存放的。

    part1:代码:

    A =importdata('D:\Codedata\test\newspace\forexcel\weights_32.txt'); %导入包含带分组数据的txt文件
    B=reshape(A,576,128);         %将数据分成128组,每组576个
    mkdir('D:\Codedata\test\newspace\forexcel\','分组1'); %创建一个名为‘分组1’的文件夹
    for j=1:128                   %生成128个txt,每个txt中包含576个数据
        n = strcat('D:\Codedata\test\newspace\forexcel\','分组1','\',num2str(j),'.txt');
        fid=fopen(n,'w');
        fprintf(fid,'%g\n',B(:,j));
        fclose(fid);
    end
    

    part2:运行结果图:

    打开1.txt 的结果-->
    1. 升级版:将上一步的128个txt进行拆分,每个txt对应一个文件夹,每一个文件夹下将576(9*64)个数据拆分成64组,每组的9个数据存于一个txt中。

    part1:代码:

    for i=1:128
        mkdir('D:\Codedata\test\newspace\forexcel\分组2\',int2str(i));  %创建128个文件夹,同时将matlab的当前工作路径设置为此
        filename = ['D:\Codedata\test\newspace\forexcel\分组1\',int2str(i),'.txt'];  
        A = load(filename);  %使用load()函数读取128个txt文件的数据
        B=reshape(A,9,64);   %将数据分成64组,每组9个数据
        for j=1:64           %生成64个txt,每个txt中包含9个数据
            n = strcat('D:\Codedata\test\newspace\forexcel\分组2\',int2str(i),'\','测试_',num2str(j),'.txt');
            fid=fopen(n,'w');
            fprintf(fid,'%g\n',B(:,j));
            fclose(fid);
        end
    end
    

    part2:运行结果图:

    打开1文件夹 -> 打开测试1.txt ->

    八、读取.mat文件的数据,批量写入xml文件(选读Matlab)

    • 面临问题:下载了一个网上的数据集,没有提供直接的标签,只给了一个.mat格式的文件,用Matlab读取,批量转换为符合VOC数据集格式的标签文件。

    part1:代码:

    data=load('D:/Program Files/MATLAB2019b/MYcode/VehicleInfo.mat')   %.mat文件存储的路径
    cars=data.VehicleInfo;
    for n=1:length(cars)
        n;
        car=cars(n);
        
        %%
        %每一辆车新建一个xml文件存储车的信息
        carName=car.name;
        %图片的高度
        carHeight=car.height;
        %图片的宽度
        carWidth=car.width;
        %新建xml文件
        annotation = com.mathworks.xml.XMLUtils.createDocument('annotation');
        annotationRoot = annotation.getDocumentElement;  
        %定义子节点.xml的存储路径
        folder=annotation.createElement('folder');
        folder.appendChild(annotation.createTextNode(sprintf('%s','JPEGImages')));%这里为xml存放的目录
        annotationRoot.appendChild(folder);
        %图片的名称
        jpgName=annotation.createElement('filename');
        jpgName.appendChild(annotation.createTextNode(sprintf('%s',carName(end-10:end-4),'.jpg')));   %获取倒数第11-倒数第5的字符
        annotationRoot.appendChild(jpgName);
        %路径
        jpgPath=annotation.createElement('path');
        jpgPath.appendChild(annotation.createTextNode(sprintf('%s','/home/phm/E/YOLOX/YOLOX-main/datasets/JPEGImages/',carName(end-10:end-4),'.jpg')));
        annotationRoot.appendChild(jpgPath);
        %source
        jpgSource=annotation.createElement('source');
        annotationRoot.appendChild(jpgSource);
            database=annotation.createElement('database');
            database.appendChild(annotation.createTextNode(sprintf('%s','Unknown')));
             jpgSource.appendChild(database);
        %添加图片的size
        jpgSize=annotation.createElement('size');
        annotationRoot.appendChild(jpgSize);
        %定义size的子节点
            %图片宽度
            width=annotation.createElement('width');
            width.appendChild(annotation.createTextNode(sprintf('%i',carWidth)));
            jpgSize.appendChild(width);
            
            %图片高度
            height=annotation.createElement('height');
            height.appendChild(annotation.createTextNode(sprintf('%i',carHeight)));
            jpgSize.appendChild(height);
            
            %图片深度,彩色图片3
            depth=annotation.createElement('depth');
            depth.appendChild(annotation.createTextNode(sprintf('%i',3)));
            jpgSize.appendChild(depth);
            
            segmented=annotation.createElement('segmented');
            segmented.appendChild(annotation.createTextNode(sprintf('%i',0)));%表示已经标注过了
            annotationRoot.appendChild(segmented);
            %接下来是每一辆车的标注信息        
        %%
        
        carVehicles=car.vehicles;
        L=length(carVehicles);
        if L>1
            carName
            L
        end
        for nn=1:length(carVehicles)
            vehicle=carVehicles(nn);
            %标注框的最左侧坐标
            vLeft=vehicle.left;
            %标注框的最上边坐标
            vTop=vehicle.top;
            %标注框的最右侧坐标
            vRight=vehicle.right;
            %标注框最下面坐标
            vBottom=vehicle.bottom;
            %车的类别
            vCategory=vehicle.category;
            %图片中有多少个标注对象
            carNvehicles=car.nVehicles;
            %在这里生成每一符图片的txt文件,用于
            %%注意一张图片中可能会有多个对象
            %%matlab直接生成xml对象???
            %将这一辆车的信息注入xml中
            object=annotation.createElement('object');
            annotationRoot.appendChild(object);
            %标注框类别名称
            categoryName=annotation.createElement('name');
            categoryName.appendChild(annotation.createTextNode(sprintf('%s',vCategory)));
            object.appendChild(categoryName);
            
            pose=annotation.createElement('pose');
            pose.appendChild(annotation.createTextNode(sprintf('%s','Unspecified')));
            object.appendChild(pose);
            
            truncated=annotation.createElement('truncated');
            truncated.appendChild(annotation.createTextNode(sprintf('%i',0)));
            object.appendChild(truncated);
            
            difficult=annotation.createElement('difficult');
            Difficult.appendChild(annotation.createTextNode(sprintf('%i',0)));
            object.appendChild(Difficult);
            
            bndbox=annotation.createElement('bndbox');
            object.appendChild(bndbox);
            
            xmin=annotation.createElement('xmin');
            xmin.appendChild(annotation.createTextNode(sprintf('%i',vLeft)));
            bndbox.appendChild(xmin);
            
            ymin=annotation.createElement('ymin');
            ymin.appendChild(annotation.createTextNode(sprintf('%i',vTop)));
            bndbox.appendChild(ymin);
            
            xmax=annotation.createElement('xmax');
            xmax.appendChild(annotation.createTextNode(sprintf('%i',vRight)));
            bndbox.appendChild(xmax);
            
            ymax=annotation.createElement('ymax');
            ymax.appendChild(annotation.createTextNode(sprintf('%i',vBottom)));
            bndbox.appendChild(ymax);     
        end
        
         %存储xml
        savePath=['D:\BITVehicle_xml\',carName(1:end-3),'xml'];    %指定文件夹用于存放生成的xml文件
        xmlwrite(savePath,annotation);      
    end
    

    2022/4/26补充:


    九、使用Python读取某文件夹下所有文件并写入txt中

    • 面临问题:在准备好数据集后,都是通过读取.txt的内容实现对图片的调用训练的,因此需要将一个包含图片的文件夹中的全部.jpg名字读成一个txt。
    • 举例:以下文件夹是存放图片的文件夹,我想将它包含的10张图片读成一个.txt,详见如下两图介绍。

    way1:生成的txt中只有图片名的代码:

    • 需要先创建一个.txt用于存放信息,因为代码中没有创建的过程
    • 注意修改自己的路径,一共有两处
    #导入需要的库
    import sys
    import os
    import random #导入随机函数
    
    #存放原始图片地址
    data_base_dir = r"D:\Codedata\test_pic"
    #建立列表,用于保存图片信息
    file_list = [] 
    #读取图片文件,并将图片名写到txt文件中
    write_file_name = 'D:/Codedata/test_pic.txt'
    write_file = open(write_file_name, "w") #以只写方式打开write_file_name文件
    
    for file in os.listdir(data_base_dir): #file为current_dir当前目录下图片名
        if file.endswith(".jpg"): #如果file以jpg结尾
          write_name = file #图片路径 + 图片名 + 标签
          file_list.append(write_name) #将write_name添加到file_list列表最后
          sorted(file_list) #将列表中所有元素随机排列
          number_of_lines = len(file_list) #列表中元素个数
          
    #将图片信息写入txt文件中,逐行写入
    for current_line in range(number_of_lines):
        write_file.write(file_list[current_line] + '\n')
        
    #关闭文件
    write_file.close()
    

    way2:生成的txt包含图片路径及图片名的代码:

    • 需要先创建一个.txt用于存放信息,因为代码中没有创建的过程
    • 注意修改自己的路径,一共有三处
    #导入需要的库
    import sys
    import os
    import random #导入随机函数
    
    #存放原始图片地址
    data_base_dir = r"D:\Codedata\test_pic"
    #建立列表,用于保存图片信息
    file_list = [] 
    #读取图片文件,并将图片地址、图片名写到txt文件中
    write_file_name = 'D:/Codedata/test_pic.txt'
    #以只写方式打开write_file_name文件
    write_file = open(write_file_name, "w") 
    
    for file in os.listdir(data_base_dir): #file为current_dir当前目录下图片名
        if file.endswith(".jpg"): #如果file以jpg结尾
          write_name = file #图片路径 + 图片名 + 标签
          file_list.append(write_name) #将write_name添加到file_list列表最后
          sorted(file_list) #将列表中所有元素随机排列
          number_of_lines = len(file_list) #列表中元素个数
          
    #将图片信息写入txt文件中,逐行写入
    for current_line in range(number_of_lines):
        write_file.write('D:\\Codedata\\test_pic\\' + file_list[current_line] +'\n')
    
    #关闭文件
    write_file.close()
    

    way3:如果是linux系统,在终端输入一条指令就可以生成txt,包含图片路径及图片名:
    在想要生成txt的路径下打开终端,输入:

    ls -R 包含图片的路径/* >xxx.txt
    

    例如:我的包含图片的路径是/home/phm/F/fxh/test_resolution/picture/car_480x854_L1
    我想在这个路径下生成一个input.txt,所以在此路径下打开终端,输入:
    ls -R /home/phm/F/fxh/test_resolution/picture/car_480x854_L1/* > test.txt

    生成的input.txt的内容如下:【注意:此方法仅适用于图片数量较少的情况】

    十、使用Python根据已有的txt文件删除某文件夹下的文件

    • 在上一节的基础上,我们已经获得了包含图片路径及图片名的.txt文件,现在想利用这个txt删除指定文件夹下的图片文件
    • 先展示已经具备的文件环境:
    1. test_pic的文件夹中有需要删掉的图片,也有需要保留的图片
    2. 可以通过test_pic.txt中包含的图片路径对此文件夹进行操作
    3. 假设想删除1-10.jpg,保留1-10-副本.jpg

    part1:代码:

    #导入库
    import os
    
    #把txt读成列表data
    input_file =  r'D:/Codedata/test_pic.txt' ##需要删除的文件名组成的txt文件
    with open(input_file, 'r') as f:
        data = f.read().splitlines()
    
    #读取待删除的文件夹下的全部文件,读成列表filelist
    rootdir=r'D:\Codedata\test_pic'
    filelist=os.listdir(rootdir)
    
    #删除操作
    for file in data:
        if '.jpg' in file:
            del_file = file #使用txt中的路径
            os.remove(del_file)#删除文件
            print("已经删除:",del_file)
    

    part2:运行结果图:

    如果.txt是只包含图片名,而没有路径的,则需要在上述代码中做一处修改

    第16行的del_file = file修改为:

    del_file = rootdir + '\\' + file #当代码和要删除的文件不在同一个文件夹时,必须使用绝对路径
    
    展开全文
  • path = './txt_9000/' # txt文件路径 files= os.listdir(path) files.sort() for file in files: with open(path + file, 'r',encoding='utf-8') as f: numbers= f.readlines() print(numbers) ..
  • 这里写自定义目录标题Python 处理批量处理txt并保存成excel数据文件提取文件夹中的文件名称读取txt成dataFrame提取提取txt中数组数据保存成excel文件,不覆盖原始文件其他注意事项 Python 处理批量处理txt并保存成...
  • 因为有上千个这样的txt文件,所以假如手动修改的话需要很长时间 因此写一个python文件是最方便的,能在半分钟内全部搞定 2 - python源码加注释 开头: import os # 只需要引入这个系统控制的库 # 定义一个...
  • python如何批量读取txt文件

    千次阅读 2021-01-29 22:18:39
    原标题:python如何批量读取txt文件python批量读取txt文件的方法:首先导入系统模块;然后将文件夹路径更改为需要批量读取的txt文件存放的路径;再调用系统模块得到该文件夹下的所有文件名称;最后遍历文件夹,读取...
  • 将该文件放置和欲修改的txt文件的同一目录,代码实现的是修改每行的第一个值。如果想要修改更多,修改s ='1'+ j[1:]便可。 import os import glob seq_dir = os.path.expanduser('./') files=glob.glob(seq_dir + '*...
  • 最近想用python批量处理数据,把自己网上找答案的过程整理了一下,希望对大家有用。问题:一个文件夹中有38个txt文件,这38个txt的命名各不相同,要把这38个txt文件中的数据整合到一个txt中。思路:获取所有txt文件...
  • python 批量处理txt文件内容 使用python 完成txt文档内容转换 转换前 文件夹中有批量的txt文档 内容为 第一行 为总坐标数量 第二、三、四、五行 为坐标信息 目标 转换后 去除总坐标数量、 只保留坐标信息、且为三位...
  • 使用python批量处理文本文件中指定的内容 代码背景 给数据集打标签时,搭上了错误的标签,不利于后续进行图像的识别。因此需要在已经生成的xml文件中修改标签的名称,以便于后续模型的训练。 代码 import os path ...
  • 起因团委要求写团员登记表,大家填完汇聚后的几天因为有些人不合格所以决定全班各自打印自己的表格,所以把全班的登记表都上传到群里,感觉很可怕,决定分析一下数据方案将doc转换txt逐行读取txt文件通过比对关键词...
  • 通过python对多个txt文件进行处理读取路径,读取文件获取文件名,路径名对响应的文件夹名字进行排序对txt文件内部的数据相应的某一列/某一行进行均值处理写入到事先准备好的Excel文件中关闭Excel文件#import numpy ...
  • 应我家领导要求,开发一个word文档批处理脚本,涉及word文档、excel表格、文件存取、排序与索引、简单GUI等内容,...完整代码、示例文档详见:开发需求:素材为批量word文档集(docx):位于original文件夹中。文件...
  • 如何利用python批量转换文件编码?例如,txt文件由UTF-16LE转为UTF-8…… 问题重现:往往利用python处理数据时,都会遇到文件编码格式不对,那么如何批量转换呢,下面直接上代码! 实例:整个文件夹的txt文件由UTF-...
  • 我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作。比方我有下图一系列的txt文件,我该如何把它们写入一个txt文件中并且读取为DataFrame格式呢?首先我们要用到glob模块,这...
  • 如何使用Python进行批量文件整理 “引言” 批量文件整理一直是日常工作中令人头疼的事,使用 Python 进行大批量文件整理,可以大大提升工作效率。下面来介绍几种批量文件整理的小技巧。 难度:⭐⭐ 一、准备...
  • 批量做Text文本写入csv时,首先把text文件读入dataframe,然后添加左列text路径名为文件名,右列为文章内容。 # -*- coding:utf-8 -*- import os import os.path import codecs filePaths=[] fileContents=[] for ...
  • Python 批量读取 txt 文件为 DataFrame

    万次阅读 热门讨论 2017-09-20 14:48:03
    我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作。比方我有下图一系列的 txt 文件,我该如何把它们写入一个 txt 文件中并且读取为 DataFrame 格式呢? 首先我们要用到 ...
  • 做工程项目时,经常会遇到需要将两个数据集融合到一个数据集里的情况,但是两个数据集里的类别数又要能够对应上,比如两个数据集都是二分类的,那类别标签就是0和1,这种情况下就需要将另一个数据集的标签改为... txt_r
  • 本文介绍的是Python对CSV、Excel、txt、dat文件处理,具有一定的参考价值,需要的朋友跟随小编一起来看下
  • python批量修改txt文件,csv文件 编码格式 from os import listdir from chardet import detect fns = (fn for fn in listdir() if fn.endswith('.csv')) for fn in fns: with open(fn, 'rb+') as fp: content = ...
  • class Encoding: def __init__(self): #文件扩展名 self.ext = “.*” #编码 self.srcEncoding=None self.dstEncoding=None  def convertEncoding(self, content, srcEncoding=None, dstEncoding=None): 
  • 环境:python3.7。软件下载自官网,安装过程参考 廖雪峰的python教程。不过按照其教程安装,报了api-win-msc-crt-runtime丢失的问题。 后续,我直接到官网下载,以及百度...with open('G:\\Qer\in.txt') as From_f...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,899
精华内容 7,159
关键字:

python批量处理txt文件