0

ここでちょっと困った。を含むテキスト ファイルがあり["Data1", "Data2", "Data3"]、ファイルにない場合 data1は、3 つの文字列すべてを含む新しいリストを追加し、データが既に存在する場合は、それを印刷します。このコードのどこが壊れていて、その理由は何ですか?

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 の初心者で、よく混乱します。そのため、私は dict を使用していません (とにかくそれらが何であるかはわかりません)。そのため、そのコードを最も単純な方法で機能させたいと考えています。

PS2: また、それが機能する場合、私の次のステップは、リスト内の 3 つのデータ項目の特定の 1 つを返す検索エンジンを作成することです。たとえば、ユーザー名が「sael」のリストで data2 を取得したい場合、どうすればよいでしょうか?

4

3 に答える 3

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 に答える
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:

また、ファイルを 2 回開いているため、コストがかかる場合があります。Python が読み取りモードと書き込みモードの両方でファイルを開く機能を持っているかどうかはわかりません。

于 2013-08-22T15:28:43.970 に答える