我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python实现常见数据格式转换的方法详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python实现常见数据格式转换的方法详解

xml_to_csv

代码如下:

import os
import glob
import pandas as pd
import xml.etree.ElementTree as ET

def xml_to_csv(path):
    xml_list = []
    for xml_file in glob.glob(path + '/*.xml'):
        tree = ET.parse(xml_file)
        root = tree.getroot()
        for member in root.findall('object'):
            value = (root.find('filename').text,
                     int(root.find('size')[0].text),
                     int(root.find('size')[1].text),
                     member[0].text,
                     int(member[4][0].text),
                     int(member[4][1].text),
                     int(member[4][2].text),
                     int(member[4][3].text)
                     )
            xml_list.append(value)
    column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']
    xml_df = pd.DataFrame(xml_list, columns=column_name)
    return xml_df

def main():
    print(os.getcwd())
    # 结果为E:\python_code\crack\models_trainning
    # ToDo 根据自己实际目录修改
    # image_path = os.path.join(os.getcwd(), 'dataset/crack/test')  # 根据自己实际目录修改,或者使用下面的路径
    image_path = 'E:/python_code/crack/models_trainning/dataset/crack/test'
    print(image_path)
    xml_df = xml_to_csv(image_path)
    xml_df.to_csv('./dataset/crack/train/crack_test.csv', index=None)  # 根据自己实际目录修改
    print('Successfully converted xml to csv.')

main()

这里需要注意的是,这里的话我们只需要修改路径,就不需要在终端运行(每次需要先去该目录下)了,对于不玩linux的同学比较友好。

print(os.getcwd())

结果为E:\python_code\crack\models_trainning

image_path = os.path.join(os.getcwd(), 'dataset/crack/test')
image_path = 'E:/python_code/crack/models_trainning/dataset/crack/test'

以上两种图片路径方法都可以,一个采用的是os.path.join()进行路径拼接。

xml_df.to_csv('./dataset/crack/train/crack_test.csv', index=None) 

保存为csv的路径可以随意写

结果如下

csv_to_tfrecord

# -*- coding: utf-8-*-
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import

import os
import io
import pandas as pd
import tensorflow as tf
import tensorflow.compat.v1 as tf
from PIL import Image
from research.object_detection.utils import dataset_util
from collections import namedtuple, OrderedDict

flags = tf.app.flags
flags.DEFINE_string('csv_input', '', 'Path to the CSV input')
flags.DEFINE_string('output_path', '', 'Path to output TFRecord')
FLAGS = flags.FLAGS


# 将分类名称转成ID号
def class_text_to_int(row_label):
    if row_label == 'crack':
        return 1
    # elif row_label == 'car':
    #     return 2
    # elif row_label == 'person':
    #     return 3
    # elif row_label == 'kite':
    #     return 4
    else:
        print('NONE: ' + row_label)
        # None


def split(df, group):
    data = namedtuple('data', ['filename', 'object'])
    gb = df.groupby(group)
    return [data(filename, gb.get_group(x)) for filename, x in zip(gb.groups.keys(), gb.groups)]


def create_tf_example(group, path):
    print(os.path.join(path, '{}'.format(group.filename)))
    with tf.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:
        encoded_jpg = fid.read()
    encoded_jpg_io = io.BytesIO(encoded_jpg)
    image = Image.open(encoded_jpg_io)
    width, height = image.size

    filename = (group.filename + '.jpg').encode('utf8')
    image_format = b'jpg'
    xmins = []
    xmaxs = []
    ymins = []
    ymaxs = []
    classes_text = []
    classes = []

    for index, row in group.object.iterrows():
        xmins.append(row['xmin'] / width)
        xmaxs.append(row['xmax'] / width)
        ymins.append(row['ymin'] / height)
        ymaxs.append(row['ymax'] / height)
        classes_text.append(row['class'].encode('utf8'))
        classes.append(class_text_to_int(row['class']))

    tf_example = tf.train.Example(features=tf.train.Features(feature={
        'image/height': dataset_util.int64_feature(height),
        'image/width': dataset_util.int64_feature(width),
        'image/filename': dataset_util.bytes_feature(filename),
        'image/source_id': dataset_util.bytes_feature(filename),
        'image/encoded': dataset_util.bytes_feature(encoded_jpg),
        'image/format': dataset_util.bytes_feature(image_format),
        'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
        'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
        'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
        'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
        'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
        'image/object/class/label': dataset_util.int64_list_feature(classes),
    }))
    return tf_example


def main(csv_input, output_path, imgPath):
    writer = tf.python_io.TFRecordWriter(output_path)
    path = imgPath
    examples = pd.read_csv(csv_input)
    grouped = split(examples, 'filename')
    for group in grouped:
        tf_example = create_tf_example(group, path)
        writer.write(tf_example.SerializeToString())

    writer.close()
    print('Successfully created the TFRecords: {}'.format(output_path))


if __name__ == '__main__':
    # ToDo 修改相应目录
    imgPath = r'E:\python_code\crack\models_trainning\dataset\crack\test'
    output_path = 'dataset/crack/test/crack_test.record'
    csv_input = 'dataset/crack/test/crack_test.csv'
    main(csv_input, output_path, imgPath)

如xml_to_csv类似,只要把路径改好即可

imgPath是图片所在文件夹路径

output_path是tfrecord生成的路径

csv_iinput是使用的csv的路径

当然,你可能会出现下面报错,起初笔者还以为是编码问题,可是始终未能解决。后来仔细检查发现,是自己路径搞错了,因此大家出现这个错误的时候,检查一下路径先。

到此这篇关于Python实现常见数据格式转换的方法详解的文章就介绍到这了,更多相关Python数据格式转换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python实现常见数据格式转换的方法详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中常见的数据转换问题及解决方案

Python中常见的数据转换问题及解决方案引言:在Python编程中,数据的转换是一项非常常见的任务。无论是从字符串到整数、从列表到元组,还是从字典到JSON,数据转换是我们在处理数据时经常遇到的问题之一。本文将介绍一些常见的数据转换问题,
2023-10-22

Python数据类型转换实现方法

这篇文章主要介绍了Python数据类型转换的实现,有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可
2022-12-08

SQL中的Convert()函数方法(转换数据格式)

在SQL中,Convert()函数用于转换数据的格式。它可以将一个数据类型转换为另一个数据类型,例如将字符串转换为整数、将日期转换为字符串等。Convert()函数的语法如下:```CONVERT(data_type, expression
2023-09-01

Python处理XML格式数据的方法详解

本文实例讲述了Python处理XML格式数据的方法。分享给大家供大家参考,具体如下: 这里的操作是基于Python3平台。 在使用Python处理XML的问题上,首先遇到的是编码问题。 Python并不支持gb2312,所以面对encodi
2022-06-04

C++中常见的数据类型转换问题及解决方法

C++ 中常见的数据类型转换问题及解决方法引言:在 C++ 编程中,经常会遇到不同数据类型之间的转换问题。正确地进行数据类型转换是保证程序正确性和性能的关键之一。本文将介绍一些常见的数据类型转换问题,并提供相应的解决方法和具体的代码示例。一
2023-10-22

Android App数据格式Json解析方法和常见问题

(1).解析Object之一: 代码如下:{"url":"http://www.cnblogs.com/qianxudetianxia"}解析方法: 代码如下:JSONObject demoJson = new JSONObject(jso
2022-06-06

JSON数据格式转换为Python的类对象方法有哪些

本篇内容主要讲解“JSON数据格式转换为Python的类对象方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JSON数据格式转换为Python的类对象方法有哪些”吧!  有时候我们有这种
2023-06-02

Python实现将HTML转换成doc格式文件的方法示例

本文实例讲述了Python实现将HTML转换成doc格式文件的方法。分享给大家供大家参考,具体如下: 网页上的一些文章,因为有格式的原因,它们在网页上的源码都是带有html标签的,用css来进行描述。本文利用HTML Parser 和doc
2022-06-04

PHP实现时间戳转日期格式的方法详解

标题:PHP实现时间戳转日期格式的方法详解在Web开发中,经常需要处理日期和时间数据,其中时间戳是一种常见的表示时间的方式。PHP作为一种常用的服务器端编程语言,提供了丰富的日期时间处理函数,可以方便地将时间戳转换为具体的日期时间格式。本
PHP实现时间戳转日期格式的方法详解
2024-03-08

Python实现图像尺寸和格式转换处理的示例详解

这篇文章主要为大家详细介绍了如何利用Python实现图像尺寸获取和格式转换处理的功能,文中的示例代码讲解详细,感兴趣的可以了解一下
2023-05-14

Java实现将PDF转为图片格式的方法详解

PDF文件和图片文件,这是两种完全不一样的格式,可是有的时候这两种格式却是有相互转换的需要,本文将介绍如何通过Java应用程序快速高效地将PDF转为图片格式。一起来看看吧
2023-03-23

一文详解Python中实现单例模式的几种常见方式

这篇文章主要为大家介绍了Python中实现单例模式的几种常见方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-22

C#实现Word转换TXT的方法详解

这篇文章主要为大家详细介绍了如何利用C#实现Word转换TXT的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-22

Python中json格式数据的编码与解码方法详解

本文实例讲述了Python中json格式数据的编码与解码方法。分享给大家供大家参考,具体如下: python从2.6版本开始内置了json数据格式的处理方法。 1、json格式数据编码 在python中,json数据格式编码使用json.d
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录