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


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

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

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

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

    • 方法02: 一行行读取
    >>> f = file('1.txt')
    >>> while f:
    	line = f.readline()
    	if len(line) == 0:
    		break
    	else:
    		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 k	
    1
    2
    3
    4 

    • 方法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)-1
    	while l >=0:
    		str0 += s[l]
    		l  -= 1
    	return 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:
            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()

    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'])



  • 相关阅读:
    张建(北京工业大学软件学院副教授)_百度百科
    孤独患者马天宇:独自生存我也会适应得很好_红人访_腾讯娱乐_腾讯网
    zz
    java~springboot~ibatis Invalid bound statement (not found)原因
    数据库~dotnetcore连接Mysql插入中文失败
    k8s~术语解释
    springboot~让我习惯了TDD的开发模式
    POJ 2498 Martian Mining
    Java中的DeskTop类
    我和ip_conntrack不得不说的一些事
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6767603.html
Copyright © 2020-2023  润新知