##########################################################################

#对于第二份文件:第一份与第二份不相同,以第二份为主;

#第一份存在,第二份不存在,修改为0;第一份不存在,第二份存在,以第二份为主

##########################################################################

# -*- coding: utf-8 -*-

"""

Created on Wed Feb 22 13:40:03 2017

@author: Administrator

"""

import sys

def readFile(filename):   ##读文件

re = {}

for line in open(filename):

arr = line.strip().split('\t')  #  s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符;

#1. 当rm为空时,默认删除空白符(包括'\n', '\r',  '\t',  ' ')

#2.这里的rm删除序列是只要边(开头或结尾)上的字符在删除序列内,就删除掉

if len(arr)<=2:

continue

key = arr[0] + '_' + arr[1]

re.setdefault(key, arr[2])   #dict.setdefault(key, default=None),

#key——查找的键值;default——键不存在时,设置的默认键值

return re

def Minus(baseFile, otherFile):       #对于第二份文件:第一份与第二份不相同,以第二份为主;

#第一份存在,第二份不存在,修改为0;第一份不存在,第二份存在,以第二份为主

re = {}

baseDict = readFile(baseFile)

otherDict = readFile(otherFile)

for k,v in baseDict.items():

if k in otherDict:

if not baseDict[k].isdigit() or not otherDict[k].isdigit():

continue

c = int(baseDict[k]) - int(otherDict[k])

if c != 0:

re[k] = otherDict[k]

continue

if k not in otherDict:

if not baseDict[k].isdigit() :

continue

c = 0

re[k] = str(c)

continue

for k,v in otherDict.items():

if k not in baseDict:

if not otherDict[k].isdigit():

continue

re[k] = otherDict[k]

return re

def writeFile(baseDict):

for k,v in baseDict.items():   #dict = { 1 : 2, 'a' : 'b', 'hello' : 'world' }

#dict.items()  [('a', 'b'), (1, 2), ('hello', 'world')]

arr = k.split('_')

print "%s\t%s\t%s" % (arr[0], arr[1], v)

def main():

#baseFile = sys.argv[1]

#otherFile = sys.argv[2]

baseFile = r'G:\pythoncode\one.txt'

otherFile = r'G:\pythoncode\two.txt'

baseDict = Minus(baseFile, otherFile)

writeFile(baseDict)

if __name__=='__main__':

main()

#####################################################

######################案例###########################

one.txt

1   2   3

4   5   6

7   8   9

10  11  12

two.txt

1  2   3

7   8   9

10  11  8

13  14  15

输出

13  14  15

10  11  8

4   5   0

python的N个小功能(更新文件)的更多相关文章

  1. python的N个小功能(找到符合要求的图片,重命名,改格式,缩放,进行随机分配)

    ########################################################################## 循环读取该目录下所有子目录和子文件 ####### ...

  2. python的N个小功能(文件内容的匹配替换)

    # -*- coding: utf-8 -*- """ Created on Fri Feb 17 20:25:05 2017 @author: who "&q ...

  3. 【Python】猜数小游戏(文件操作)

    人生苦短,我用Python 关键词 1.多用户 2.字典记录所有成绩 3.每次游戏轮数&总游戏次数&平均每次游戏需要多少轮 字典Dictionary.列表List.元组Tuple差异化 ...

  4. python的N个小功能(找到要爬取的验证码链接,并大量下载验证码样本)

    # -*- coding: utf-8 -*- """ Created on Mon Mar 21 11:04:54 2017 @author: sl "&qu ...

  5. python的N个小功能(连接数据库并下载相应位置的图片)

    #################################################################################################### ...

  6. python的N个小功能之正则匹配

    1.. 匹配任意除换行符“\n”外的字符:2.*表示匹配前一个字符0次或无限次:3.+或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复,惰性匹配:4. .*? 表示匹配任意 ...

  7. python的N个小功能(图片预处理:打开图片,滤波器,增强,灰度图转换,去噪,二值化,切割,保存)

    ############################################################################################# ###### ...

  8. python的N个小功能(高斯模糊原理及实践)

    原理: 二维高斯函数 1)         为了计算权重矩阵,需要设定σ的值.假定σ=1.5,则模糊半径为1的权重矩阵如下: 2)         这9个点的权重总和等于0.4787147,如果只计算 ...

  9. python的N个小功能(文本字段对应数值,经纬度计算距离,两个时间点计算时间间隔)

    案例1 >>> import pandas as pd >>> df=pd.DataFrame({'A':[1,2,3],'B':[1,2,3],'C':[1,2, ...

随机推荐

  1. 20155310 2016-2017-2 《Java程序设计》第十周学习总结

    20155310 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 •网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就 ...

  2. WPF GDI+字符串绘制成图片(二)

    原文:WPF GDI+字符串绘制成图片(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...

  3. 【MongoDB】NoSQL Manager for MongoDB 教程(进阶篇)

    项目做完,有点时间,接着写下第二篇吧.回顾戳这里  基础篇:安装.连接mongodb.使用shell.增删改查.表复制 本文属于进阶篇,为什么叫进阶篇,仅仅是因为这些功能属于DB范畴,一般使用的不多, ...

  4. 【BZOJ2395】[Balkan 2011]Timeismoney

    [BZOJ2395][Balkan 2011]Timeismoney 题面 \(darkbzoj\) 题解 如果我们只有一个条件要满足的话直接最小生成树就可以了,但是现在我们有两维啊... 我们将每个 ...

  5. JS 判断checkbox 是否选中

    <input type="checkbox" id="IsEnable" /> 在调试的时候,会出现,一直未true的状态,不管是选中还是未选中 解 ...

  6. Spine with Unity Mecanim

    前言 最近这两天刚刚接触Spine,研究了一下Unity Mecanim Animator如何控制Spine,在此分享记录一下,如有不当之处,请留言指出,欢迎讨论. Unity & Spine ...

  7. intellij idea maven配置及maven项目创建

    1. 下载Maven 官方地址:http://maven.apache.org/download.cgi 解压并新建一个本地仓库文件夹 2.配置maven环境变量 3.配置配置本地仓库路径 4.配置阿 ...

  8. eclipse版本信息及操作系统

    一.查看版本信息: 进入到eclipse安装目录下,有一个.eclipseproduct文件,用记事本打开,就可以知道版本了,后面version=的值就是版本 二.是否为32位操作系统: 找到ecli ...

  9. Python学习之路7 - 生成器&迭代器

    本章内容: 列表生成式 生成器 yield 迭代器 列表生成式 当我们要定义一个列表的时候,我们通常用这种方式a = [1,2,3],但是如果我们定义了一个比较长的列表的时候,手动定义列表就会比较麻烦 ...

  10. ORM(object relational Maping)

    ORM即对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中.本质上 ...