Python 小程序,对文件操作及其他

来源:互联网 发布:hadoop大数据平台架构 编辑:程序博客网 时间:2024/05/16 01:30

下面是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等。比如说,从文件中读取一行数据,分别存放于列表中,再对列表进行操作,如去掉里面的重复项,排序等操作。

常见对文件中行进行操作:

#这里列出两个常用的方法

  • 方法01: 一次性读取所有行
>>> f = file('1.txt')>>> while 1:lines = f.readlines()if not lines:breakfor line in lines:print line

  • 方法02: 一行行读取
>>> f = file('1.txt')>>> while f:line = f.readline()if len(line) == 0:breakelse:print line,

常见对列表去重复项操作:

  • 方法01: 函数处理

#列表中值超过1者表示有重复则删除,比如:

#列表顺序==>改变

>>> list1.count(3)  #元素值为3的个数:2个2>>> def removeDup(lst):for x in lst:if lst.count(x)>1:del lst[lst.index(x)]>>> lst = [1,3,2,4,3]>>> removeDup(lst)>>> lst[1, 2, 4, 3]

  • 方法02: 常规方法

#建新空列表,遍历原始列表,如果不在新空列表中,则添加

#列表顺序==>不变

>>> list1 = [1,3,2,4,3]>>> list2 = []>>> for i in list1:if i not in list2:list2.append(i)>>> list2[1, 3, 2, 4]

  • 方法03: 字典方法

#利用字典key值的唯一性,及里面的fromkeys()及keys()方法

>>> list1 = [1,3,2,4,3]>>> list2 = {}.fromkeys(list1).keys()>>> list2[1, 2, 3, 4]

  • 方法04: 集合方法

#集合能去除列表中重复项

#列表顺序==>改变

>>> list1 = [1,3,2,4,3]>>> set(list1)set([1, 2, 3, 4])

  • 方法05: 迭代工具

#用itertools的迭代工具的groupby()方法

#列表顺序==>改变

>>> import itertools>>> lst = [1, 3, 2, 4, 3]>>> lst.sort()>>> it = itertools.groupby(lst)>>> for k,g in it:print k1234 

  • 方法06: 索引排序

#先用集合,再用排序,注意key=list1.index,控制顺序

#列表顺序==>改变

>>> list1 = [1,3,2,4,3]>>> list2 = list(set(list1))>>> list2.sort(key=list1.index)>>> list2[1, 3, 2, 4]

常见对字符串反转操作:

  • 方法01: 列表切片
>>> s = 'Hello'    >>> l = list(s)>>> l[::-1]['o', 'l', 'l', 'e', 'H']

  • 方法02: 常规做法
>>> def rev(s):str0 = ''l    = len(s)-1while l >=0:str0 += s[l]l  -= 1return str0>>> s = 'A B C D'>>> rev(s)'D C B A'

  • 方法03: 列表反转
>>> s = 'HELLO'>>> l = list(s)>>> l.reverse()  #列表reverse()方法>>> ''.join(l)   #用空字符串join列表'OLLEH'
  • 方法04: reduce函数
>>> def rev(s):return reduce(lambda x,y: y+x, s) #匿名函数和reduce函数结合使用>>> s = 'AB CD'>>> rev(s)'DC BA'
小程序一: 提取两个文件中相同部分

f1 = open("1.txt","r+")f2 = open("2.txt","r+")f3 = open("3.txt","w+")all1 = f1.readlines()    #先拿文件1中所有行取出all2 = f2.readlines()    #再拿文件2中所有行取出f1.close()f2.close()for l1 in all1:    for l2 in all2:        if l1.strip()==l2.strip(): #比较行中内容是否一样            f3.write(l2)    else:        continueelse:    pass        print "#"*40f3.close()
小程序二: 反向读取文件

假如要读取的test.txt文件内容如下:

Python
Perl
Java
Shell

file1 = file('test.txt','r')   #打开文件句柄list1 = []                     #用一个空列表用于存放每行的内容while True:    line = file1.readline()    #按行读取    list1.append(line.strip()) #去除字符串空格    if len(line) == 0:         #如果没内容,则中断        break                     for l in list1[::-1]:          #反向遍历,然后依次读取出来    print lfile1.close()
输出结果:

Shell
Java
Perl
Python


小程序三: 对两个文本文件进行操作

要求:

1. 移除每个文件中的重复项

2. 找出两个文件中的相同项

3. 操作两个文件中的合集

4. 操作两个文件中的交集

#原始文件:文件1,文件2f1 = file('1.txt','r')f2 = file('2.txt','r')#生成文件:文件3,文件4,文件5,文件6f3 = file('same.txt','w+')f4 = file('union.txt','w+')f5 = file('1_diff.txt','w+')f6 = file('2_diff.txt','w+')#用空列表来存储原始文件的内容list1  = []  #用一个空列表用于存放每行的内容list2  = []  #用于存放文件2中的内容1_diff = []  #用于存放文件1中的去重部分2_diff = []  #用于存放文件2中的去重部分#遍历两个文件while True:    line1 = f1.readline()    line2 = f2.readline()    if len(line1) ==0 or len(line2)==0:        break    else:        list1.append(line1)        list2.append(line2)list1_uniq = set(list1) #排除第一个文件中重复的内容list2_uniq = set(list2) #注意应用集合排除重复的项目same       = list1_uniq & list2_uniq #取交集union      = list1_uniq | list2_uniq #取合集#取两个集合的交集,写入文件3中for i in same:       f3.write(i)  #取两个集合的并集,写入文件4中for i in union:      f4.write(i)  #取列表1中部分,与共同部分取交集for i in list1_uniq:    if not i in same:        f5.write(i)#取列表2中部分,与共同部分取交集       for i in list2_uniq:    if not i in same:        f6.write(i)#关闭所有打开的文件句柄f1.close()f2.close()f3.close()f4.close()f5.close()f6.close()

NOTE:也可以用X-Y来求两个集合的差集

>>> X = set('spam')
>>> Y = set(['h','a','m'])
>>> X,Y
(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))

>>> X - Y
set(['p', 's'])



4 0
原创粉丝点击