下面是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等。比如说,从文件中读取一行数据,分别存放于列表中,再对列表进行操作,如去掉里面的重复项,排序等操作。
常见对文件中行进行操作:
#这里列出两个常用的方法
>>> f = file('1.txt')
>>> while 1:
lines = f.readlines()
if not lines:
break
for line in lines:
print line
>>> f = file('1.txt')
>>> while f:
line = f.readline()
if len(line) == 0:
break
else:
print line,
常见对列表去重复项操作:
#列表中值超过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]
#建新空列表,遍历原始列表,如果不在新空列表中,则添加
#列表顺序==>不变
>>> list1 = [1,3,2,4,3] >>> list2 = [] >>> for i in list1: if i not in list2: list2.append(i) >>> list2 [1, 3, 2, 4]
#利用字典key值的唯一性,及里面的fromkeys()及keys()方法
>>> list1 = [1,3,2,4,3]
>>> list2 = {}.fromkeys(list1).keys()
>>> list2
[1, 2, 3, 4]
#集合能去除列表中重复项
#列表顺序==>改变
>>> list1 = [1,3,2,4,3] >>> set(list1) set([1, 2, 3, 4])
#用itertools的迭代工具的groupby()方法
#列表顺序==>改变
>>> import itertools >>> lst = [1, 3, 2, 4, 3] >>> lst.sort() >>> it = itertools.groupby(lst) >>> for k,g in it: print k 1 2 3 4
#先用集合,再用排序,注意key=list1.index,控制顺序
#列表顺序==>改变
>>> list1 = [1,3,2,4,3] >>> list2 = list(set(list1)) >>> list2.sort(key=list1.index) >>> list2 [1, 3, 2, 4]
常见对字符串反转操作:
>>> s = 'Hello' >>> l = list(s) >>> l[::-1] ['o', 'l', 'l', 'e', 'H']
>>> def rev(s): str0 = '' l = len(s)-1 while l >=0: str0 += s[l] l -= 1 return str0 >>> s = 'A B C D' >>> rev(s) 'D C B A'
>>> s = 'HELLO' >>> l = list(s) >>> l.reverse() #列表reverse()方法 >>> ''.join(l) #用空字符串join列表 'OLLEH'
>>> 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:
continue
else:
pass
print "#"*40
f3.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 l
file1.close()
输出结果:
Shell
Java
Perl
Python
小程序三: 对两个文本文件进行操作
要求:
1. 移除每个文件中的重复项
2. 找出两个文件中的相同项
3. 操作两个文件中的合集
4. 操作两个文件中的交集
#原始文件:文件1,文件2
f1 = file('1.txt','r')
f2 = file('2.txt','r')
#生成文件:文件3,文件4,文件5,文件6
f3 = 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()
原文:http://blog.csdn.net/jerry_1126/article/details/39899447