在python中的文本文件中编写项目

时间:2017-04-28 04:34:18

标签: python

我有一个执行以下操作的程序。

  1. 您输入了一个输入
  2. python 1.txt apple 5
    python 1.txt orange 18
    
    1. 它会在文本文件中写入项目和金额 修改后的文本文件的示例
    2. apple : 5
      orange : 18
      
      1. 它还检查重复,然后添加现有金额的金额,如果 -
      2. python 1.txt apple 5
        
        apple : 10
        orange : 18
        

        问题:如果项目在文本文件中不存在或没有重复,请在文本文件中添加该项目。目前这不起作用

        这是我写的 -

        import sys
        
        def maj(texte, item, nombre):
            with open(texte, "r") as f_in:
                lecture = f_in.readlines()
                with open(texte, "w") as ouvrir:
                    for line in lecture:
                        line = line.strip("\n")
                        mot, chiffre = line.split(" : ")[0].strip(" "), int(line.split(" : ")[1].strip(" "))
                        if mot == item:
                            ouvrir.write("%s : %s" "\n" % (item, str(chiffre + int(nombre))))
                            ouvrir.close()
                        else:
                            ouvrir.write("%s : %s" "\n" % (mot, chiffre))
                            ouvrir.close()
        def main():
            entree = sys.argv[1]
            item = sys.argv[2]
            nombre = sys.argv[3]
            choix = str(entree)
            texte = choix.strip("[']")
            maj(texte, item, nombre)
        
        if __name__ == "__main__":
            main()
        

2 个答案:

答案 0 :(得分:0)

一些建议:

阅读整个文本文件并创建一个 - >的字典。对。这应该是这样的:

kv_pairs = {}
for line in file:
    line = line.strip('\n')
    token, value = line.split(' : ')
    kv_pairs[token] = int(value) 

然后添加新密钥/新值:

if new_key not in kv_pairs:
    kv_pairs[new_key] = 0
kv_pairs[new_key] += new_value

然后再次将值写入文件:

with open(filename, 'w') as fp:
    for k, v in kv_pairs.items():
        # format and print

将此功能集成到现有解决方案中应该是相对基础的。

答案 1 :(得分:0)

如果我理解正确你可以试试这个:

import sys


def maj(texte, item, nombre):
    lecture = []
    with open(texte, "r") as f_in:
        lecture = f_in.readlines()

    if len(lecture) == 0:
        with open(texte, "w") as ouvrir:
            ouvrir.write("%s : %s" "\n" % (item, str(nombre)))
            ouvrir.close()
            return
    else:

        is_present = False
        for e in lecture:
            if item in e:
                is_present = True

        if not is_present:
            with open(texte, "a") as ouvrir:
                ouvrir.write("%s : %s" "\n" % (item, str(nombre)))
                ouvrir.close()

        else:
            for i in range(0, len(lecture)):
                line = lecture[i].strip("\n")
                mot, chiffre = line.split(" : ")[0].strip(" "), int(line.split(" : ")[1].strip(" "))
                if mot == item:
                    lecture[i] = "%s : %s" "\n" % (item, str(chiffre + int(nombre)))

            with open(texte, "w") as ouvrir:
                for line in lecture:
                    ouvrir.write(line)
                ouvrir.close

def main():
    entree = sys.argv[1]
    item = sys.argv[2]
    nombre = sys.argv[3]
    choix = str(entree)
    texte = choix.strip("[']")
    maj(texte, item, nombre)


if __name__ == "__main__":
    main()

它假设您在python文件所在的目录中有txt文件1.txt(让我们称之为your_app.py)并且您以这种方式运行程序:

python your_app.py 1.txt apple 5

您可以复制并粘贴代码并运行它。它正在发挥作用。