最近在进行一些实验,需要进行文本处理,提取文本中关键的字段数据,得到表格,进行分析。在此简要的进行记录。

一、需求是这样的:

得到的GPGPU-Sim运行的程序文本文档。那么我现在需要提取目标对应的键值。比如文本中有如下:
A1 = B1
A2 = B2
A3 = B3
.....
A5 = B5
我现在需要提取出A2和A5对应的键值B2以及B5,按照"B2 B5"这样的格式写入到文本中去。如何用Python代码来实现?
需要提取的字段为:
[plain] view plaincopy
  1. 'gpu_sim_insn',
  2. 'gpu_ipc',
  3. 'L1I_total_cache_accesses',
  4. 'L1D_total_cache_accesses',
  5. 'gpgpu_n_tot_thrd_icount',
  6. 'gpgpu_n_tot_w_icount',
  7. 'gpgpu_n_mem_read_local',
  8. 'gpgpu_n_mem_write_local',
  9. 'gpgpu_n_mem_read_global',
  10. 'gpgpu_n_mem_write_global',
  11. 'gpgpu_n_mem_texture',
  12. 'gpgpu_n_mem_const',
  13. 'gpgpu_n_load_insn',
  14. 'gpgpu_n_store_insn',
  15. 'gpgpu_n_shmem_insn',
  16. 'gpgpu_n_tex_insn',
  17. 'gpgpu_n_const_mem_insn',
  18. 'gpgpu_n_param_mem_insn'
代码如下:
[python] view plaincopy
  1. import re
  2. import sys
  3. import os,glob
  4. #定义目录:目录下有多个文件需要处理
  5. path = 'D:\\GPUClusters\\Stargazer-master\\EXP_RESULT'
  6. #定义输出文件
  7. fout = open("res.txt",'w')
  8. x = [
  9. 'gpu_sim_insn',
  10. 'gpu_ipc',
  11. 'L1I_total_cache_accesses',
  12. 'L1D_total_cache_accesses',
  13. 'gpgpu_n_tot_thrd_icount',
  14. 'gpgpu_n_tot_w_icount',
  15. 'gpgpu_n_mem_read_local',
  16. 'gpgpu_n_mem_write_local',
  17. 'gpgpu_n_mem_read_global',
  18. 'gpgpu_n_mem_write_global',
  19. 'gpgpu_n_mem_texture',
  20. 'gpgpu_n_mem_const',
  21. 'gpgpu_n_load_insn',
  22. 'gpgpu_n_store_insn',
  23. 'gpgpu_n_shmem_insn',
  24. 'gpgpu_n_tex_insn',
  25. 'gpgpu_n_const_mem_insn',
  26. 'gpgpu_n_param_mem_insn'
  27. ]
  28. #改变路径
  29. os.chdir(path)
  30. #遍历目录下的所有文件
  31. for filename in os.listdir():
  32. fs = open(filename,'r+')
  33. #处理文件中的每一行数据
  34. for line in fs.readlines():
  35. a = line.split()
  36. if a != [] and a[0] in x:
  37. fout.write(a[-1]+'\t')
  38. if a[0] == 'gpgpu_n_param_mem_insn':
  39. fout.write('\n')
  40. break
  41. fout.write('\n')
  42. fout.close()

解释一下代码中的几个问题:

1.在一个目录下有多个文件,每个文件都要读取一次,并进行文本处理,如何实现?
[python] view plaincopy
  1. #比如d:\work下面是你要读取的文件,代码可以这样写:
  2. import os
  3. path = 'd:\\work' #or path = r'd:\work'
  4. os.chdir(path)
  5. for filename in os.listdir():
  6. file = open(filename,'r')
  7. for eachline in file.readlines():
  8. #process eachline

2.Python中.read(), .readline(), .readlines()区别?

Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法: .read()、.readline() 和 .readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。 .read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 .read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。

.readline() 和 .readlines() 非常相似。它们都在类似于以下的结构中使用:

Python .readlines() 示例
[python] view plaincopy
  1. fh = open('c:\\autoexec.bat')
  2. for line in fh.readlines():
  3. print line

.readline() 和 .readlines() 之间的差异是后者一次读取整个文件,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。另一方面,.readline() 每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()。

3.split方法:http://www.w3cschool.cc/python/att-string-split.html

二、再举一个简单的例子:
有如下文本"record.txt":
[html] view plaincopy
  1. boy:what's your name?
  2. girl:my name is lebaishi,what about you?
  3. boy:my name is wahaha.
  4. girl:i like your name.
  5. ==============================================
  6. girl:how old are you?
  7. boy:I'm 16 years old,and you?
  8. girl:I'm 14.what is your favorite color?
  9. boy:My favorite is orange.
  10. girl:I like orange too!
  11. ==============================================
  12. boy:where do you come from?
  13. girl:I come from SH.
  14. boy:My home is not far from you,I live in Jiangsu province.
  15. girl:Let's be good friends.
  16. boy:OK!

需求:将文件(record.txt)中的数据进行分割并按照以下规律保存起来:

--boy的对话单独保存为boy_*.txt的文件(去掉"boy:")
--girl的对话单独保存为girl_*.txt的文件(去掉"girl:")
--文件中总共有三段对话,分别保存为boy_1.txt,girl_1.txt,boy_2.txt,girl_2.txt,boy_3.txt,girl_3.txt共六个文件(文件中的不同的对话已经用"======="分割)。
代码:
[python] view plaincopy
  1. boy_log = []
  2. girl_log = []
  3. version = 1
  4. def save_to_file(boy_log,girl_log,version):
  5. filename_boy = 'boy_' + str(version) + ".txt"
  6. filename_girl = 'girl_' + str(version)  + ".txt"
  7. fb = open(filename_boy,"w")
  8. fg = open(filename_girl,"w")
  9. fb.writelines(boy_log)
  10. fg.writelines(girl_log)
  11. fb.close()
  12. fg.close()
  13. def process(filename):
  14. file = open(filename,"r")
  15. for eachline in file.readlines():
  16. if eachline[:6] != "======":
  17. mylist = eachline.split(":")
  18. if mylist[0] == "boy":
  19. global boy_log
  20. boy_log.append(mylist[-1])
  21. else:
  22. global girl_log
  23. girl_log.append(mylist[-1])
  24. else:
  25. global version
  26. save_to_file(boy_log,girl_log,version)
  27. version += 1
  28. boy_log = []
  29. girl_log = []
  30. save_to_file(boy_log,girl_log,version)
  31. if __name__ == "__main__":
  32. fn = "record.txt"
  33. process(fn)
两个例子都是非常基础也很使用的,记录下来以便以后查阅。
再来一个简单的需求,我需要获取Linux上的ipv4的eth0地址,代码如下:
[python] view plaincopy
  1. #/usr/bin/python
  2. import sys
  3. import os
  4. os.system("ifconfig > ip.info")
  5. fs = open("ip.info",'r+')
  6. flag = 0
  7. def get_ip():
  8. for line in fs.readlines():
  9. a = line.split()
  10. if a != [] and a[0] == "eth0":
  11. flag = 1
  12. if a != [] and a[0] == "lo":
  13. flag = 0
  14. if flag == 0:
  15. continue
  16. else:
  17. for item in a:
  18. if a[0] == "inet" and item[0:5] == "addr:":
  19. return item[5:]
  20. ip = get_ip()
  21. print ip
注明出处:http://blog.csdn.net/lavorange/article/details/41647091

python处理文本相关推荐

  1. 如何用python读取文本中指定行的内容

    如何用python读取文本中指定行的内容 搜索资料 我来答 分享 新浪微博 QQ空间 浏览 5284 次 查看全文 http://www.taodudu.cc/news/show-64036.ht ...

  2. python 图片 文本 矫正

    python 图片 文本 矫正 代码 # -*- coding: UTF-8 -*- import numpy as np import cv2 import os ## 图片旋转 def rotat ...

  3. python.freelycode.com-通过OpenCV和Python进行文本倾斜校正

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 本文所展示的是一个由Pyhton实现的文本倾斜校正的脚本,在实现中使用到了OpenCV和Python的图像 ...

  4. 快速排序 python菜鸟教程-Python菜鸟文本处理4种方法

    https://www.xin3721.com/eschool/pythonxin3721/ 自从认识了python这门语言,所有的事情好像变得容易了,作为小白,逗汁儿今天就为大家总结一下python ...

  5. lda 可以处理中文_用python处理文本数据

    用python处理文本数据 Q:这篇文章主要讲什么? A:这篇文章主要讨论如何用python来做一些简单的文本处理--文本相似度比较. 谈起python的自然语言处理,肯定会让人想起NLTK.不过上面 ...

  6. 教你利用python处理文本

    我是个C/C++ Coder,并不是专业写python的,python lua其实属于一类语言,只不要python的库更多,强大之处并不完全是python语言特性,而且扩展库比较多,请允许我黑一下py ...

  7. python中数据用折线图表示_用python处理文本数据

    用python处理文本数据 Q:这篇文章主要讲什么? A:这篇文章主要讨论如何用python来做一些简单的文本处理--文本相似度比较. 谈起python的自然语言处理,肯定会让人想起NLTK.不过上面 ...

  8. python输出文本和值_python读取文本中数据并转化为DataFrame的实例

    在技术问答中看到一个这样的问题,感觉相对比较常见,就单开一篇文章写下来. 从纯文本格式文件 "file_in"中读取数据,格式如下: 需要输出成"file_out&quo ...

  9. python计算现场得分_浅谈用 Python 计算文本 BLEU 分数

    浅谈用 Python 计算文本 BLEU 分数 BLEU, 全称为 Bilingual Evaluation Understudy(双语评估替换), 是一个比较候选文本翻译与其他一个或多个参考翻译的评 ...

  10. Python发送文本邮件

    在运行机器学习等需要大量计算的程序时,可以在报错或者程序运行完成时,发送邮件提醒. 参考:Python发送邮件(文本邮件发送) # 运行完,发邮件提醒 # 参考 https://blog.csdn.n ...

最新文章

  1. 图解全球无人驾驶产业链:这些公司在主宰人类出行的未来
  2. 企业建设网站之前需要做好哪些基本了解?
  3. Spring事务失效的 8 大原因,这次可以吊打面试官了!
  4. SpringMvc的服务器端跳转和客户端跳转
  5. SATA盘与SAS盘的区别
  6. java maven 操作 收集的一些命令
  7. linux转码软件下载,格式工厂linux版
  8. JavaScript 九种跨域方式实现原理 1
  9. LeetCode(905)——按奇偶排序数组(JavaScript)
  10. jsp标签使用技巧整理
  11. [微信小程序] js变量名称写活
  12. 【Vegas原创】红烧肉的做法
  13. 22. DOM 简介
  14. Volley源码解析(一)
  15. 磁珠 符号_电子元件磁珠该如何使用呢?
  16. quartus13.0用原理图输入法设计8位全加器
  17. LiveData原理解析
  18. 【Y9000P 2022 GTX3060 CUDA安装记录】
  19. 乐2的android版本,乐视2高通|MIUI10|安卓6.0|最终完美版|极速_最新最全的乐2高通版ROM刷机包下载、刷机...
  20. iQOONeo6SE和红米k40区别 哪个好 iQOONeo6SE和红米k40哪个值得买 两者配置对比

热门文章

  1. Crypto.com宣布将在2021年1月19日下架XRP
  2. 产品要想跑得赢,政策定价来帮您
  3. Dokcer使用总结(Dockerfile、Compose、Swarm)
  4. plus webview关闭事件监听
  5. 使用WPF创建画图箭头
  6. 弹出窗弹出两次的原因
  7. 产品入门八——用户体验设计
  8. 1-3 Sass 语法、编译、调试
  9. nginx 下开启pathinfo模式
  10. 【软件分析与挖掘】An Empirical Study of Bugs in Build Process