要写入文件的Python函数不会切换到nex上的else语句

2024-04-20 09:13:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python函数,我正在尝试将增量id保存到一个文件中。你知道吗

def generate_id():
     with open(".id.txt", "w+") as id:  
         person_id = id.read()
         print('1:', person_id)
         if person_id == '':
             person_id = 1
             id.write(str(person_id))
             print("if", person_id)
             return person_id
         else:
             person_id = int(person_id)
             person_id += 1
             id.truncate()
             id.write(str(person_id))
             print("else", person_id)
             return person_id

问题是,这是我每次通话的输出:

In [36]: generate_id()
1:
if 1
Out[36]: 1

In [37]: generate_id()
1:
if 1
Out[37]: 1

In [38]: generate_id()
1:
if 1
Out[38]: 1

有什么办法让每次通话的价值增加吗?你知道吗


编辑

这是我用来解决问题的代码。谢谢你的帮助!你知道吗

def generate_id():
    with open(".id.txt", "a+") as unique_id:  # a+ creates the file if it does not exist 
        unique_id.seek(0)
        person_id = unique_id.read()

        if not person_id:
            person_id = 1
        else:
            person_id = int(person_id)
            person_id += 1

    with open(".id.txt", "w+") as unique_id:
        unique_id.write(str(person_id))

        return person_id

Tags: intxtidreturnifaswithopen
3条回答

这似乎对我有用:

def generate_id():
     with open("myfile.txt", "r+") as id:
         person_id = id.read()
         print('1:', person_id)
         if person_id == '':
             person_id = 1
             id.write(str(person_id))
             print("if", person_id)
             return person_id
         else:
             person_id = int(person_id)
             person_id += 1
             id.seek(0)
             id.truncate()
             id.write(str(person_id))
             print("else", person_id)
             return person_id

r+替换w+w+甚至在读取之前就删除了文件内容,因此文件总是空的。r+,另一方面,附加到文件。为了在写回之前删除内容,需要将file对象的指针设置为0,这解释了id.seek(0)(位置0-在开头)。然后你可以再写一次。你知道吗

希望这有帮助。你知道吗

在第一次调用时,必须确保文件存在,并且

import os
if os.path.isfile(".id.txt"):

如果不是,用"w+"打开,否则用"r+"打开。你知道吗

根据Python documentation

Modes 'r+', 'w+' and 'a+' open the file for updating (reading and writing); note that 'w+' truncates the file.

由于使用w+打开文件,因此总是清除其内容,因此对.read的调用返回空字符串。你知道吗

相关问题 更多 >