For loop issue:
in1 = open('file_1', 'r')
in2 = open('file_2', 'r')
outf = open('out_file', 'w')
for line in in1:
s = line.split('\t')
A = s[1][:-1]
B = s[0]
counter = 0
for line in in2:
ss = line.split('\t')
if A == ss[0] or A == ss[1]:
开发者_如何学Gocounter += 1
outf.write('%s\t%s\t%s\n'%(A,B,counter))
The problem is that it is only going through for line in in2:
for the first line in in1
. I can't seem to figure out why.
You can iterate over a file only once. To start from the beginning again, use
in2.seek(0)
before the inner loop.
The first time you loop over in2
, you consume it. Either reopen it, or seek back to the beginning.
Once you have read each line from file_2 in the inner loop then in2 is at end-of-file. If you want to read file_2 for each line in file_1 then add:
in2.seek(0)
just before or after the write.
When working with files, please do this
with open('out_file', 'w') as outf:
with open('file_1', 'r') as in1:
for line in in1:
s = line.split('\t')
a = s[1][:-1]
b = s[0]
counter = 0
with open('file_2', 'r') as in2:
for line in in2:
etc.
Using with
assures your files are closed.
Opening a file in the smallest enclosing scope guarantees it can be read all the way through. It's costly to keep reopening the file, but there are a lot of ways to speed up this application.
Also, please use only lowercase
variable names. Reserve Uppercase
for class names.
精彩评论