0

こんにちは、特定の構造に関する異なる情報をそれぞれ含む 2 つのテキスト ファイルがあります。構造は、両方のファイルで ID 番号によって識別されます。私がやりたいことは、最初のファイルを読み込み、条件を満たさないデータ行をスキップすることです。次に、同じ ID 番号を持たない 2 番目のファイルの行をスキップし、他の行を処理します。ネストされた for ループを使用して実行しようとしましたが、2 つの別個の関数としても実行しましたが、どちらの試みもうまくいきませんでした。以下のように1つのループを使用してそれを完了しようとしていますが、このエラーが発生します

UnboundLocalError: local variable 'linel' referenced before assignment

これがコードです。私

F = 'file1.txt'
Fl = 'file2.txt'


 X = []               # Creats Data Lists
 M = []
 Id1 = []
 Id2 = []
 LC = 10
 N = 11

 fl = open(Fl)
 fl.readline()
 nlinesl = islice(fl,N)
 f = open(F)           #Opens file
 f.readline()          # Strips Header
 nlines = islice(f, N) #slices file to only read N lines


 for line in nlines and linel in nlinesl:             
    if line !='':
     linel = linel.strip()
     linel = linel.replace('\t','')
     columnsl = linel.split()
     lum = float(columnsl[1])
     if lum != LC:
      continue
     id1 = int(columnsl[0])
     Id1.append(id1)
     if line !='':
       line = line.strip()
       line = line.replace('\t','')
       columns = line.split()
       id2 = int(columns[1])
       Id2.append(id2)
       if Id !=  Id2:
        continue  
       x = columns[2]             # assigns variable to columns
       X.append(x)


  print(X)

これが私がしたいことの例です 2つのファイル

file1= 1 1 1 1     file2 =  1 1 1 1
       2 5 1 1              1 2 1 1
       2 3 4 4              1 1 1 1
Lc = 5
Xa = 1

したがって、file1 の 2 行目だけが残ります。つまり、file2 の 2 行目だけが処理されます。これは、同じ ID を持っているためです。私のファイルでは、IDは

 id = columns[0] for file1 

 id = columns[1] for file2

前もって感謝します

4

2 に答える 2

2

これは合法的な構文ではないと思います:

 for line in nlines and linel in nlinesl:           

代わりにこれを試してください:

 for line, line1 in zip(nlines, nlines1):

また、これらは間違った変数名を取得するのが難しい/簡単です:)

例えば、

a = range(20, 26)
b = range(200, 226)

#for i in a and j in b:  # causes 
#   print i, j           # error

for i, j in zip(a, b):
   print i, j

期待どおりの出力を生成します

20 200
21 201
22 202
23 203
24 204
25 205
于 2012-06-27T20:07:49.823 に答える
0

これらの行に沿ったもの:

ids = set()
for line in nlines:
    if line != '':
        cols = line.strip().replace('\t','').split()
        lum = float(cols[1])
        lid = int(cols[0])
        if lum != LC:
            ids.add(lid)

for line in nlinesl:
    if line != '':
        cols = line.strip().replace('\t','').split()
        lid = int(cols[1])
        if lid in ids:
            x = cols[2]
            X.append(x)
于 2012-06-27T20:13:20.950 に答える