【问题标题】:Python specific modification of a file文件的 Python 特定修改
【发布时间】:2020-04-13 18:57:49
【问题描述】:

我有一个名为“data.txt”的文件,如下所示:

Oliver
14052
Jack
2257
Harry
22568
Jacob
684940
Connor
46871

在这个文件中,名字 Oliver 对应数字 14052,名字 Jack 对应数字 2257,...

我正在寻找一个带有两个参数的函数:(name (str), number (int))

该函数必须搜索该名称是否已在文件中:

如果存在,则将作为参数传递的数字与文件中名称对应的数字相加。然后它将文件中的旧数字替换为总和的结果。

如果它不存在,那么它会在文件末尾写入一行名称和一行数字,以将这个新名称及其数字添加到列表中。

感谢您关注我的问题。祝你有美好的一天!

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: python function file


【解决方案1】:

试试这个

def search(name, num):
    with open('test.txt', 'r') as fp:
        data = fp.read().split("\n")
        if name in data:
            idx = data.index(name)
            data[idx + 1] = str(int(data[idx + 1]) + num)
        else:
            data += [name, str(num)]
    with open('test.txt', 'w') as fp:
        print('\n'.join(data))
        fp.write('\n'.join(data))


search('Oliver', -52)

【讨论】:

    【解决方案2】:

    这个脚本应该是你想要的:

    file=open('name_of_your_file.txt','r')
    
    datas=file.readlines()
    file.close()
    
    
    def f(name,number):
    
        file=open('name_of_your_file.txt','w')
        newDatas=datas[:]
    
        if(name+'\n' not in datas):
            newDatas.append(name+'\n')
            newDatas.append(str(number)+'\n')
    
        else:
            index=datas.index(name+'\n')
            newNumber=number+int(datas[index+1])
            newDatas[index+1]=str(newNumber)+'\n'
    
        file.writelines(newDatas)
    
    
    f("Martin",15446)
    

    【讨论】:

      【解决方案3】:
      # Vote for Rusty!
      def f(name, number):
          with open('data.txt') as dt:
              lines = [line.rstrip('\n') for line in dt]
      
          names = lines[::2]
          numbers = [ int(n) for n in lines[1::2] ]
      
          try:
              i = names.index(name)
              numbers[i] += number
          except ValueError:
              names.append(name)
              numbers.append(number)
      
          with open('data.txt', 'w+') as dt:
              for i in range(len(names)):
                  dt.write(names[i])
                  dt.write('\n')
                  dt.write(str(numbers[i]))
                  dt.write('\n')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        相关资源
        最近更新 更多