【发布时间】:2020-08-02 19:10:25
【问题描述】:
我有一个 Python 文件 file1.py,其中包含以下代码行:
uname="auto1@mailnesia.com"
pwd="abcdef"
我想将uname替换并更改为“auto2mailnesia.com”,然后更改为“auto3@mailnesia.com”等等,然后使用在另一个文件中更新了uname。
考虑一个场景,我想将 uname 从 auto1 更新为 auto3。
我有另一个 Python 文件 file2.py,其代码行如下:
from xxx.xxx import file1
for i in range(0,1):
currentuser = (uname[uname.index('auto') + 4:uname.index('@')])
newuser = str(int(currentuser) + 1)
newusername = uname.replace(currentuser, newuser)
print(uname)
print(currentuser)
print(newusername)
print(newuser)
with open(testdataFileName, 'r+') as f:
text = f.read()
text = re.sub(uname, newusername, text)
f.seek(0)
f.write(text)
当我在 1 的循环中运行 file2.py 时,uname 会在 file1.py 中正确更新
输出如下:
auto1@mailnesia.com
1
auto2@mailnesia.com
2
但是,当我在循环 3 中运行 file2.py 时,uname 只会在 file1.py 中更新一次。
输出如下:
test_auto1@mailnesia.com
1
test_auto2@mailnesia.com
2
test_auto1@mailnesia.com
1
test_auto2@mailnesia.com
2
test_auto1@mailnesia.com
1
test_auto2@mailnesia.com
2
我不明白为什么uname 在循环运行时只在file1.py 中更新一次。
有人可以解释一下吗?
另外,如果有人能告诉我我做错了什么以及如何解决这个问题,我将不胜感激。
【问题讨论】:
-
这能回答你的问题吗? Writing to a file in a for loop
-
你实际上
print的价值观是什么?现在,看看代码。为什么这些值应该由文件内容更新?您更改了文件的内容,但这有什么关系呢? -
无论如何,如果您想验证文件内容是否已更改,最准确的方法是实际检查文件,例如在文本编辑器中打开它。
-
如果我理解正确,你想运行 file2.py,它会读取 file1.py。然后将
file1.py(其中uname="auto1@mailnesia.com")中的值转换为uname="auto2@mailnesia.com"。如果您多次运行它,我假设您希望它创建新的 uname 和 pwd 对组,其中用户名不断从 1 增加到 2 到 3 到 4 到 .... 您运行的次数。我的理解正确吗? -
是的;您将其存储在
text中。下次通过for循环会发生什么?发生的第一件事是currentuser = (uname[uname.index('auto') + 4:uname.index('@')])。但是uname现在与之前的值相同,因此currentuser将获得与上次相同的值,依此类推。当您这次打开文件时,您将再次阅读文本,但随后尝试将 sameuname替换为 samenewusername。这就是uname只更新一次的原因,正如您所抱怨的那样:因为循环中的任何内容都不会更改uname的值。
标签: python for-loop file-handling