python实现文本文件合并


Posted in Python onDecember 29, 2015

python合并文本文件示例代码。

python实现两个文本合并

employee文件中记录了工号和姓名

cat employee.txt:

100 Jason Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma

bonus文件中记录工号和工资

cat bonus.txt:

100 $5,000
200 $500
300 $3,000
400 $1,250

要求把两个文件合并并输出如下, 处理结果:

400 ashok sharma $1,250

100 jason smith $5,000
200 john doe $500
300 sanjay gupta $3,000

这个应该是要求用shell来写的,但我的shell功底不怎么样,就用python来实现了
注意,按题目的意思,在输出文件中还需要按照姓名首字母来排序的

#! /usr/bin/env python
 
#coding=utf-8
fp01=open("bonus.txt","r")
a=[]
for line01 in fp01:
a.append(line01)
fp02=open("employee.txt","r")
fc02=sorted(fp02,key=lambda x:x.split()[1])
for line02 in fc02:
i=0
while line02.split()[0]!=a[i].split()[0]:
i+=1
print "%s %s %s %s" % (line02.split()[0],line02.split()[1],line02.split()[2],a[i].split()[1])
fp01.close()
fp02.close()

我们再来看一段同样功能的 代码

# coding gbk 
# 
# author: GreatGhoul 
# email : greatghoul@gmail.com 
# blog : http://greatghoul.javaeye.com 
  
import sys,os,msvcrt 
  
def join(in_filenames, out_filename): 
  out_file = open(out_filename, 'w+') 
    
  err_files = [] 
  for file in in_filenames: 
    try: 
      in_file = open(file, 'r') 
      out_file.write(in_file.read()) 
      out_file.write('\n\n') 
      in_file.close() 
    except IOError: 
      print 'error joining', file 
      err_files.append(file) 
  out_file.close() 
  print 'joining completed. %d file(s) missed.' % len(err_files) 
  print 'output file:', out_filename 
  if len(err_files) > 0: 
    print 'missed files:' 
    print '--------------------------------' 
    for file in err_files: 
      print file 
    print '--------------------------------' 
  
if __name__ == '__main__': 
  print 'scanning...' 
  in_filenames = [] 
  file_count = 0 
  for file in os.listdir(sys.path[0]): 
    if file.lower().endswith('[all].txt'): 
      os.remove(file) 
    elif file.lower().endswith('.txt'): 
      in_filenames.append(file) 
      file_count = file_count + 1 
  if len(in_filenames) > 0: 
    print '--------------------------------' 
    print '\n'.join(in_filenames) 
    print '--------------------------------' 
    print '%d part(s) in total.' % file_count 
    book_name = raw_input('enter the book name: ') 
    print 'joining...' 
    join(in_filenames, book_name + '[ALL].TXT') 
  else: 
    print 'nothing found.' 
  msvcrt.getch()

最后我们再来看一个小编遇到的情况:

今天汇编的时候在阿甘的博客里面看到了一部小说《疯狂的程序员》,于是网上搜了下准备放到手机里闲时看看,无奈下载后发现是分章节的txt文本,一共有87个文件,考虑到阅读起来不是很方便,于是想找个现成的工具合并txt文本。

结果尝试了几个工具后觉得合并效果都不给力啊,于是打算自己动手。其实cmd的命令"type *.txt >> crazy-programmer.txt"还是很有效果的,然而合并后的txt文件却十分庞大,所以我还是自己写了一个脚本完成了合并。

说明:由于我下载的87个txt文件的字符编码格式都不统一,所以我用chardet模块判断字符编码类型后再用codecs模块的codecs.open功能解决了编码问题。如果直接用file的open打开txt文件的话,在UCS-2 Little Endian的编码情况下,file.read()遇到中文的冒号(即“:”)后会无法读取冒号以后的内容,所以需要用codecs.open(path,'r',encoding)来解决。

如果还有问题可以留言,代码如下:

#!coding: cp936 
import codecs, chardet 
 
def fileopen(filename): 
  f = open(filename, 'r') 
  s = f.read() 
  if(chardet.detect(s)['encoding'] == 'UTF-16LE'): 
    f.close() 
    f = codecs.open(filename, 'r', 'utf-16-le')     
    data = f.read().encode('gb2312', 'ignore') 
    f.close() 
  elif(chardet.detect(s)['encoding'] == 'GB2312'): 
    data = s 
    f.close() 
  return data 
 
i = 1 
while i <=87: 
  if(i < 10): 
    filename = '0'+str(i)+'.txt' 
  else: 
    filename = str(i)+'.txt' 
  text = fileopen(filename) 
  file('crazy-p.txt', 'a+').write(text) 
  i = i+1

其中,chardet模块需要下载安装,脚本还可以改进以适应更多种情况,我就懒了。

Python 相关文章推荐
Python入门篇之函数
Oct 20 Python
详解Python中内置的NotImplemented类型的用法
Mar 31 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
flask框架视图函数用法示例
Jul 19 Python
Python 中的lambda函数介绍
Oct 10 Python
详解python读取和输出到txt
Mar 29 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
Python验证码识别处理实例
Dec 28 #Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 #Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 #Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 #Python
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 #Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 #Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 #Python
You might like
PHP简单的MVC框架实现方法
2015/12/01 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
php和html的区别点详细总结
2019/09/24 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
node.js入门教程
2014/06/01 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
python访问sqlserver示例
2014/02/10 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
对Django中内置的User模型实例详解
2019/08/16 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
python绘制雷达图实例讲解
2021/01/03 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
大学生职业生涯规划书范文
2014/01/04 职场文书
小学班级特色活动方案
2014/08/31 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
学校标语口号大全
2015/12/26 职场文书
销售会议开幕词
2016/03/04 职场文书
MYSQL 运算符总结
2021/11/11 MySQL