关闭

Python计算机视觉编程练习6:文本、列表操作

标签: python
413人阅读 评论(0) 收藏 举报
分类:

起因

小伙伴做行人检测,对文中中生成的定位数据需要重新调整,方便程序循环的读写。他是用MATLAB实现的,我看了一下,好多关于文本操作的函数,我都没看过,还得X度,长了不少见识。。。。从网上摘抄了一部分(MATLAB文件操作小结,分享+备份)。。。。同时,我觉得根据前面两篇博文,实现他的要求应该是不难的,尝试写了一下,发现是可行的嘛~~~~

要求

原始行人定位数据存放在 seq01.txt、seq02.txtseq03.txt三个TXT文件中。点击下载

这里写图片描述

原始数据存储格式如下图所示,以 seq01.txt 中数据为例吧。


图片名+坐标
"left/image_00000001_0.png": (212, 204, 232, 261), (223, 181, 259, 285), (293, 151, 354, 325), (452, 208, 479, 276), (255, 219, 268, 249), (280, 219, 291, 249);
"left/image_00000002_0.png": (212, 204, 232, 261), (223, 179, 261, 287), (293, 151, 357, 331), (452, 210, 477, 276), (257, 221, 268, 249), (282, 217, 293, 249);
"left/image_00000003_0.png": (221, 179, 259, 287), (210, 206, 234, 263), (257, 219, 270, 251), (282, 221, 293, 249), (295, 149, 361, 331), (450, 212, 477, 278);
"left/image_00000004_0.png": (221, 183, 261, 289), (217, 210, 234, 263), (257, 223, 268, 249), (282, 223, 293, 251), (299, 147, 365, 335), (448, 212, 477, 278);

这里写图片描述

小伙伴要求把里面每一行(代表一张图)里面的数据重新操作并导出到一个新的txt中,如下图


文件类(seq01.txt=1、seq02.txt=2 、seq03.txt=3)+ 每一行图片名 + .txt

这里写图片描述

每个新的txt的内容就是纯粹的坐标

这里写图片描述

最后的数字是10他自己加上去的,什么作用不清楚,反正每个新的txt最后都要加上数字10,对于编程来说没什么影响。

坐标(把原始每行括号去掉,逗号去掉,空格为一个,分号去掉)+ 数字10

实现

下载:链接

#python
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'li'
import glob
import os
"""
功能:实现读取txt文件中每行内容,并按照规定格式重新存储到指定文件。
"""

def get_txt_list(file,output):
    print file
    filename = os.path.basename(file) #获取文件夹名
    z1 = filename.find('0')           #查找0所在位置
    z2 = filename.find('.')           #查找.所在位置
    s1 = filename[z1+1:z2]            #获取更改格式的部分文件夹名

    fid = open(file).readlines()      #读取文件内所有行

    for i in range(len(fid)):         #遍历行
        str1 = fid[i]
        z3 = str1.find('/')
        z4 = str1.find(':')
        s2 = str1[z3+1:z4-1]          #获取更改格式的部分文件名
        out_name =  str(s1) + '_'+ str(s2) + '.txt' #定义输出文件名
        outdir = os.path.join(output,out_name)      #定义输出路径
        str2 = str1[z4+1:]
        #替换:逗号,单个空格,多个空格,括号;然后去掉两端的空格;然后分割存放进列表ss
        ss = str(str2).replace(',',' ').replace(';',' ').replace('(',' ').replace(')',' ').replace('    ',' ').replace('  ',' ').strip().split(' ')
        print ss
        #按照要求交换位置
        i = 0
        while i < len(ss):
            if i % 2 != 0:
                (ss[i-1],ss[i]) = (ss[i],ss[i-1])
            else:
                pass
            i += 1
        #将列表内容写入文件
        f = open(outdir,'wb+')
        for j in ss:
            f.write(j)
            f.write(' ')
        f.write('10')
        f.close()

        print ss
    print u'文档','%s'%(filename),u'转换完毕!'


input = r'C:\Users\li\Desktop\LL\*.txt'     #输入文件路径
output = r'C:\Users\li\Desktop\2015.11.20'  #输出文件路径
for file in glob.glob(input):               #遍历输入文件夹内的所有文件
    get_txt_list(file,output)




python自动给数字前面补0的方法

python中有一个zfill方法用来给字符串前面补0,非常有用

n = "123"
s = n.zfill(5)
assert s == "00123"

zfill()也可以给负数补0

n = "-123"
s = n.zfill(5)
assert s == "-0123"

对于纯数字,我们也可以通过格式化的方式来补0

n = 123
s = "%05d" % n
assert s == "00123"

http://www.newsmth.net/bbstcon.php?board=Python&gid=59801
对列表使用sort()排序,如何得到对应元素的索引
比如对a = [3,4,1,7,2]用a.sort()排序得到a = [1,2,3,4,7],请问如何得到排序后的
数组元素的索引系列,是说,在原来数组中的索引。

在这个例子里应该是[2,4,0,1,3].
方案1

b = zip(a, range(len(a)))
b.sort(key = lambda x : x[0])
c = [x[1] for x in b]

方案2
也可以这样

>>> a = [3,4,1,7,2]
>>> sorted(enumerate(a), key=lambda x:x[1])
[(2, 1), (4, 2), (0, 3), (1, 4), (3, 7)]

方案3

In [1]: a = [3,4,1,7,2]

In [2]: enumerate(a)
Out[2]: <enumerate object at 0x8591f0c>

In [3]: list(enumerate(a))
Out[3]: [(0, 3), (1, 4), (2, 1), (3, 7), (4, 2)]

In [4]: from operator import itemgetter

In [5]: sorted(enumerate(a), key=itemgetter(1))
Out[5]: [(2, 1), (4, 2), (0, 3), (1, 4), (3, 7)]

In [6]: [index for index, value in sorted(enumerate(a), key=itemgetter(1))]
Out[6]: [2, 4, 0, 1, 3]
大杀器:
In [7]: import numpy as np

In [8]: np.argsort([3,4,1,7,2])
Out[8]: array([2, 4, 0, 1, 3])

方案4

>>> a = [3, 4, 1, 7, 2]
>>> sorted(xrange(len(a)), key=a.__getitem__)
[2, 4, 0, 1, 3]
1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

python计算机视觉项目实践 答案

python 计算机视觉项目实践
  • u012192662
  • u012192662
  • 2014-05-05 09:58
  • 3296

推荐一个计算机视觉图书:python计算机视觉编程

编辑部的主页:好像没啥用 http://shop.oreilly.com/product/0636920022923.do 每章的代码,github上面的:中文版 https://github...
  • wangyaninglm
  • wangyaninglm
  • 2015-06-29 21:19
  • 7282

Python机器视觉编程环境搭建方法

随着计算机硬件速度的提高,执行效率不再是程序员编写机器视觉程序的唯一考虑。Python因其跨平台、开放性和众多第三方库的支持正得到越来越多关注。本文以windows平台为例,介绍了Python计算机视...
  • iracer
  • iracer
  • 2016-05-30 22:06
  • 10884

Python计算机视觉编程练习7:文件操作

创建文件:1) os.mknod("test.txt") 创建空文件 2) open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件创建目录...
  • lilai619
  • lilai619
  • 2015-11-24 19:16
  • 424

《python计算机视觉编程》读书笔记------6(Numpy篇)

直方图均衡化: # -*- coding: utf-8 -*- from PIL import Image from pylab import * from PCV.tools import imto...
  • Txiaomiao
  • Txiaomiao
  • 2016-03-18 14:10
  • 894

Python计算机视觉编程练习2:import 自定义模块

python导入自定义模块方法:1.如果导入的模块和主程序在同个目录下,直接import就行了2.如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的 __init__.py 文件...
  • lilai619
  • lilai619
  • 2015-09-21 11:02
  • 1008

Python计算机视觉编程练习5:pickle模块学习

picklepickle可以接受几乎所有的python对象,并且将其转换成字符串表示,该过程叫封装(pickling),相反的过程叫拆封(unpickling)。
  • lilai619
  • lilai619
  • 2015-11-12 15:38
  • 1194

Python计算机视觉编程练习13:文件(夹)批量更名、图像批量resize

起因深度学习,需要大量的测试样本和训练样本,从各处“搜刮”来的数据整合起来,容易遇到:图片名(文件夹)长度不一、中英文数字夹杂、图片尺寸不同等问题,导入深度模型无法正常载入图片。例如:文件夹包含中文、...
  • lilai619
  • lilai619
  • 2016-03-11 15:16
  • 414

Python计算机视觉编程练习12:os模块学习

本文系转载:原文链接:http://www.cnblogs.com/BeginMan/p/3327291.html 一、os模块概述 Python os模块包含普遍的操作系统功能。如果你希...
  • lilai619
  • lilai619
  • 2016-03-11 13:16
  • 368

Python计算机视觉编程练习4:glob模块学习

glob模块简介glob模块可以查找符合特定规则的文件路径名。查找文件只用到三个匹配符:"*","?","[]"。”*”匹配0个或多个字符;”?”匹配单个字符;”[]“匹配指定范围内的字符,如:[0-...
  • lilai619
  • lilai619
  • 2015-11-11 19:10
  • 499
    个人资料
    • 访问:115244次
    • 积分:1862
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:42篇
    • 译文:1篇
    • 评论:54条
    文章分类
    最新评论