0

我在这里有点麻烦。我有一个带有 的文本文件,如果不在文件中["Data1", "Data2", "Data3"],我想制作它,然后附加一个包含所有三个字符串的新列表,如果数据已经存在,那么只需打印它。这段代码有什么问题,为什么? data1

filename = "datosdeusuario.txt"
leyendo = open(filename, 'r')
if user.name in leyendo:
  Print("Your user name is already there")
else:
  file = open(filename, 'a')
  file.write(json.dumps([user.name, "data2", "data3"])+"\n")
  file.close()
  Print("Since I couldn't find it, I did append your name and data.")

PS:我是Python新手,经常搞糊涂。这就是为什么我不使用任何字典(不知道它们是什么),所以我想让该代码以最简单的方式工作。

PS2:另外,如果可行,我的下一步是让搜索引擎返回列表中三个数据项中的一个。例如,如果我想在用户名“sael”的列表中获取 data2,我需要做什么?

4

3 回答 3

1

首先,您应该在这两种情况下都关闭文件,我认为您应该在重新打开文件进行追加之前关闭文件。

我认为问题出在这条线上:

if user.name in leyendo: 

这将始终返回 false。

您应该阅读该文件,然后像这样质疑它:

if user.name in leyendo.read():
于 2013-08-22T15:28:35.703 回答
1

似乎您正在从文件指针中读取,而不是从文件中的数据中读取。

所以,首先需要读取文件中的数据:

buffer = leyendo.read()

然后根据buffer,而不是进行检查leyendo

if user.name in buffer:

另外,您要打开文件两次,这可能有点贵。我不确定 Python 是否具有以读写模式打开文件的功能。

于 2013-08-22T15:28:43.970 回答
1

假设您的 user.name 和您的Print函数正在工作,您需要读取文件并关闭文件。

尝试这个:

filename = "datosdeusuario.txt"
f = open(filename, 'r')
leyendo = f.read()
f.close()
if user.name in leyendo:
  Print("Your user name is already there")
else:
  file = open(filename, 'a')
  file.write(json.dumps([user.name, "data2", "data3"])+"\n")
  file.close()
  Print("Since I couldn't find it, I did append your name and data.")
于 2013-08-22T15:28:21.210 回答