我正在尝试在文本文件中写一个字符串,但前提是该字符串已不在文本文件中。
b = raw_input("IP Adress: ")
os.system('cls')
if(b == '0'):
a = 0
c = raw_input("Player Name: ")
if(c == '0'):
a = 0
if(a != 0):
line = "Text\IPs\{}.txt".format(b)
output_filee = open(line, 'w+')
output_file = open(line, 'r')
lines = output_file.readlines()
for line in lines:
if(line != c):
found = 1
if(found == 1):
output_filee.write(c)
output_file.close()
output_filee.close()
print '"{}" has been added to the IP Address {}'.format(c,b)
上面的代码在文件夹中创建了新文件,但没有任何内容。 有什么建议吗?
答案 0 :(得分:1)
for
循环中的逻辑错误。它不会检查文件中是否缺少字符串,而是检查文件中是否存在与字符串不匹配的行。如果文件为空,则循环不会执行任何操作,因此它永远不会设置found = 1
。
您需要反转逻辑。将其更改为:
found = False
for line in lines:
if line == c:
found = True
break
if not found:
output_filee.write(c)
答案 1 :(得分:1)
除Barmar's answer中提到的有缺陷的逻辑外,还有一些问题:
if(line != c)
始终为false
,因为line
最后总是有\n
。所以,我想你想要这个:
import os
b = raw_input("IP Adress: ")
a = 1
if(b == '0'):
a = 0
c = raw_input("Player Name: ")
if(c == '0'):
a = 0
if(a != 0):
filepath = "{}.txt".format(b)
found = False
if os.path.exists(filepath):
output_file = open(filepath, 'r')
lines = output_file.readlines()
output_file.close()
for line in lines:
if line.rstrip() == c:
found = True
print '"{}" already present\n'.format(c)
break
if not found:
output_filee = open(filepath, 'a')
output_filee.write(c + '\n')
output_filee.close()
print '"{}" has been added to the IP Address {}'.format(c, b)
答案 2 :(得分:0)
我的片段中注意到了一些事情。
首先,您使用的是os
模块,但尚未导入。
其次,您是否希望这仅适用于Windows?因为os.system调用充其量只是' meh',直到你想要跨平台然后它们几乎一文不值。所以,如果这不是问题,那么忽略那部分。
a
在哪里定义?只有在满足某些条件时才能定义它。我建议避免错误,是设置一个任意的初始状态,这将防止发生未定义的错误。
此外,您的代码段很难在语法上遵循。当您编写更多代码或回到旧代码时,这会使维护变得非常困难。
考虑这样的事情作为参考:
import os
a = ""
b = raw_input("IP Adress: ")
found = False
os.system('cls')
if(b == '0'):
a = 0
c = raw_input("Player Name: ")
if(c == '0'):
a = 0
if(a != 0):
try:
f = "Text/IPs/{}.txt".format(b)
with open(f, "w+") as myfile:
for line in myfile.read():
if(line == c):
found = True
if found == False:
myfile.write(c)
print '"{}" has been added to the IP Address {}'.format(c,b)
except Exception, e:
print(str(e))
您可以将读/写合并为一个循环。我通常会做一些其他事情来整理这个,但我只有几分钟发布这个。希望这能让你指出写作方向。
答案 3 :(得分:0)
你可以使用像这样的函数:
def add(filename, text):
text += '\n'
with open(filename, 'a+') as lines:
if not any(text==l for l in lines):
lines.write(text)
ip_adress = raw_input("IP Adress: ")
name = raw_input("Player Name: ")
if ip_adress != '0' and name != '0':
add(r"Text\IPs\{}.txt".format(ip_adress), name)