最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

python实现文本文件合并

来源:懂视网 责编:小采 时间:2020-11-27 14:35:05
文档

python实现文本文件合并

python实现文本文件合并:python合并文本文件示例代码。 python实现两个文本合并 employee文件中记录了工号和姓名 cat employee.txt: 100 Jason Smith 200 John Doe 300 Sanjay Gupta 400 Ashok Sharma bonus文件中记录工号和工资 cat bonu
推荐度:
导读python实现文本文件合并:python合并文本文件示例代码。 python实现两个文本合并 employee文件中记录了工号和姓名 cat employee.txt: 100 Jason Smith 200 John Doe 300 Sanjay Gupta 400 Ashok Sharma bonus文件中记录工号和工资 cat bonu

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('

') 
 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 '
'.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模块需要下载安装,脚本还可以改进以适应更多种情况,我就懒了。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

python实现文本文件合并

python实现文本文件合并:python合并文本文件示例代码。 python实现两个文本合并 employee文件中记录了工号和姓名 cat employee.txt: 100 Jason Smith 200 John Doe 300 Sanjay Gupta 400 Ashok Sharma bonus文件中记录工号和工资 cat bonu
推荐度:
标签: 文件 文件夹 合并
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top