无法写入文件

  • 本文关键字:文件 python file
  • 更新时间 :
  • 英文 :


我正试图使字符串写入文本文件,但只有当该字符串已经不在文本文件中。

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 = "TextIPs{}.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)

上面的代码在文件夹中创建新文件,但其中没有任何内容。有什么建议吗?

您的for循环中的逻辑是错误的。它不是检查字符串是否从文件中丢失,而是检查文件中是否有一些行与字符串不匹配。如果文件为空,循环将不做任何事情,因此它永远不会设置found = 1

你需要颠倒逻辑。改为:

found = False
for line in lines:
    if line == c:
        found = True
        break
if not found:
    output_filee.write(c)

除了Barmar回答中提到的有缺陷的逻辑之外,还有其他一些问题:

  • 当前的设置,新文件将只包含新的球员的名字,而我认为你想要的是新文件包含所有以前的名字,以及
  • 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 presentn'.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)

我注意到你的代码片段中有几件事。

首先,您正在使用os模块,但它没有被导入。

第二,你希望这个只在windows上工作吗?因为操作系统。系统调用充其量是"无聊",直到你想要跨平台,然后它们几乎毫无价值。所以,如果这不是问题,那么忽略这部分。

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))

可以将读/写合并到一个循环中。还有一些其他的事情,我通常会做整理这个,但我只有几分钟张贴这个。

您可以使用这样的函数:

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"TextIPs{}.txt".format(ip_adress), name)

相关内容

  • 没有找到相关文章

最新更新