遍历文件夹对文件进行操作

1. 文件的指定字符进行替换

  • 可用于对point-cloud-annotation-tool中的类别信息更换为自己的类别
  • 也可以在类别后面加7个0,例如将car改为car 0 0 0 0 0 0 0
import os
def process(path):
    files = os.listdir(path)
    file_names = set([file.split('.')[0] for file in files])  # 去重
    file_names = list(file_names)
    # 替换字符
    print(file_names)
    for filename in file_names:
        file_data = ''
        dir_path = os.path.join(path, filename + ".txt")  # TXT文件
        with open(dir_path, 'r', encoding='utf-8') as f:
            for i in f:  # i为逐字输出(包含各种标点)
                # i = i.replace(":', '", ":")  # 冒号不换行
                # i = i.replace("'", "")  # 将字符串中的英文单引号替换为空
                i = i.replace('cloudnorm_', '')  # 将字符串中的英文逗号替换为换行符
                file_data += i
        with open(dir_path, 'w', encoding='utf-8') as f:  # 保存文件(清空原文件,并将file_data写入)
            f.write(file_data)

if __name__ == '__main__':
    path = 'E:/DataSet/text/data/custom/ImageSets/'
    process(path)

2. 获取文件夹下文件名

  • 可用这个脚本来生成ImageSets中的.txt文件
import os
names = os.listdir('E:/desktop/PointCloud/OpenPCDet/data/custom/testing/velodyne/')  #路径
i=0  #用于统计文件数量是否正确,不会写到文件里
train_val = open('E:/desktop/PointCloud/OpenPCDet/data/custom/testing/velodyne/test.txt','w')
for name in names:
    index = name.rfind('.')
    name = name[:index]
    train_val.write(name+'\n')
    i=i+1
print (i)

# def filename_find(filepath, return_type=0):
#     basename = os.path.basename(filepath)
#     extension = f'.{basename.split(".")[-1]}'
#     if not basename.__contains__('.'):
#         extension = ''
#     filename_without_extension = basename[0:len(basename)-len(extension)]
#     if return_type is 0:    # 文件名
#         return basename
#     if return_type is 1:    # 后缀名
#         return extension
#     if return_type is 2:    # 无后缀文件名
#         return filename_without_extension

3. 更改文件夹下所有指定文件名

import re
import os
path = "E:/desktop/PointCloud/OpenPCDet/data/custom/training/label_2" #输入你要更改文件的目录
originalname = ' - 副本' #123是要查找文件名里包含123的文件
replacename = '0' #321是要被替换的字符串,如果就是删除originalname,那么replacename = ''就可以
def main1(path1):
    files = os.listdir(path1)  # 得到文件夹下的所有文件名称
    for file in files: #遍历文件夹
        if os.path.isdir(path1 + '\\' + file):
            main1(path1 + '\\' + file)
        else:
            files2 = os.listdir(path1 + '\\')
            for file1 in files2:
                if originalname in file1:
                    #用‘’替换掉 X变量
                    n = str(path1 + '\\' + file1.replace(originalname,replacename))
                    n1 = str(path1 + '\\' + str(file1))
                    try:
                        os.rename(n1, n)
                    except IOError:
                        continue
main1(path)

4. 批量更改文件后缀

  • point-cloud-annotation-tool生成的标签文件时.bin.txt和.pcd.txt结尾的,用这个脚本将后缀修改为只有.txt结尾
# python批量更换后缀名
import os
import sys
#需要修改后缀的文件目录
os.chdir(r'E:/DataSet/text2/')

# 列出当前目录下所有的文件
files = os.listdir('./')
print('files',files)

for fileName in files:
    portion = os.path.splitext(fileName)
    # 因为有两个.直接修改时会改成.txt.txt.txt...这样一直循环
    # 所以我当时好像用着操作了两遍,第一次将""内什么都不填,这样文件就变成.bin或.pcd结尾
    # 第二次用这个脚本双引号内改为".txt",这样标签文件后缀就只有.txt了
    newName = portion[0] + ".txt" #修改为目标后缀
    os.rename(fileName, newName)

5. png2jpg

# 将png图像转换为jpg
import os
import cv2
import sys
import numpy as np

# path = "F:\\ImageLib\\VRWorks_360_Video _SDK_1.1\\footage14\\"
path = "F:\\information\\"
print(path)
for filename in os.listdir(path):
    if os.path.splitext(filename)[1] == '.png':
        # print(filename)
        img = cv2.imread(path + filename)
        print(filename.replace(".png", ".jpg"))
        newfilename = filename.replace(".png", ".jpg")
        # cv2.imshow("Image",img)
        #  cv2.waitKey(0)
        cv2.imwrite(path + newfilename, img)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值